我试图通过将字符数组作为参数将小写字母转换为大写字母。正如您在代码中看到的那样,我在“ htoi”方法中编写了“ toUpper”方法,并且我对“ toUpper”方法使用了双引用参数,当访问数组中的数据时,这给了我错误。当我在主体中使用单个引用参数声明“ toUppper”方法时,它可以正常工作。我不需要解决方案,但我只想知道为什么它不起作用..请帮助...。
#include <stdio.h>
void toUpper(char **s);
int htoi(char s[]) {
int i, n;
n = 0;
toUpper(s);//<--error here
for (i = 0; (s[i] >= '0' && s[i] <= '9') ||(s[i] >= 'A' && s[i] <= 'F'); ++i) {
n = 16 * n + determine(s, i);//converting
}
return n;
}
void toUpper(char** s) {
for (int i = 0; **(s + i) != '\0' ; ++i) {//traverse until null value
if (**(s + i) >= 'a' && **(s + i) <= 'f') {
**(s + i) = **(s + i) - ('a' - 'A');//convert character to upper case if true
}
}
}
int determine(char hexNum[], int i) {
int a;
if (*(hexNum+i) >= 'A') {
a = (*(hexNum+i) - 'A' + 10);
return a;
}
else if(*(hexNum + i) <= '9'){
a = (*(hexNum + i) - '0');
return a;
}
}
main() {
int a;
int i = 0;
char s[] = "ba";
a = htoi(s);
printf("%d", a);
}
最佳答案
在htoi
中,s
的类型为char*
,但是toUpper
的参数为char**
,应使用类似于toUpper(&s);
在使用determine
之前,需要声明或定义它。determine
需要添加一个return
以下代码可以工作。
#include <stdio.h>
void toUpper(char *s);
int determine(char hexNum[], int i);
int htoi(char s[]) {
int i, n;
n = 0;
toUpper(s);//<--error here
for (i = 0; (s[i] >= '0' && s[i] <= '9') ||(s[i] >= 'A' && s[i] <= 'F'); ++i) {
n = 16 * n + determine(s, i);//converting
}
return n;
}
void toUpper(char* s) {
for (int i = 0; s[i] != '\0'; ++i) {//traverse until null value
if (s[i] >= 'a' && s[i] <= 'f') {
s[i] = s[i] - ('a' - 'A');//convert character to upper case if true
}
}
}
int determine(char hexNum[], int i) {
int a;
if (*(hexNum+i) >= 'A') {
a = (*(hexNum+i) - 'A' + 10);
return a;
}
else if(*(hexNum + i) <= '9'){
a = (*(hexNum + i) - '0');
return a;
}
return 0;
}
int main() {
int a;
char s[] = "ba";
a = htoi(s);
printf("%d", a);
return 0;
}
关于c - 具有双重引用的函数中的函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53029944/