Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当我将参数声明为char并在htoi中使用char参数时,为什么编译器会产生错误?_C - Fatal编程技术网

当我将参数声明为char并在htoi中使用char参数时,为什么编译器会产生错误?

当我将参数声明为char并在htoi中使用char参数时,为什么编译器会产生错误?,c,C,我正在编写一个程序,将十六进制值转换为数字值,,为此,我使整函数htoi(char s[I])接受char数组 我使用getchar()插入一个char数组,允许用户输入字符,然后在我的代码中分配给一个数组,然后将所述数组用作htoi的参数,但是编译器抱怨htoi使用的参数带有一个没有强制转换的指针,需要字符。 我尝试过将char s[]这样的数组更改为int s[I],因为char只是一个较小的int,对吗因此,当我将其更改为int时,编译器会抱怨htoi{s[I])(s[]现在是int)从整

我正在编写一个程序,将十六进制值转换为数字值,,为此,我使整函数htoi(char s[I])接受char数组

我使用getchar()插入一个char数组,允许用户输入字符,然后在我的代码中分配给一个数组,然后将所述数组用作htoi的参数,但是编译器抱怨htoi使用的参数带有一个没有强制转换的指针,需要字符。

我尝试过将char s[]这样的数组更改为int s[I],因为char只是一个较小的int,对吗因此,当我将其更改为int时,编译器会抱怨htoi{s[I])(s[]现在是int)从整数生成指针,而不进行强制转换。

因此,我意识到数组中的迭代器只不过是指向数组中某个元素的指针,好吧。太好了,所以我删除了I,并且…它需要在“]”标记之前有一个表达式。

我的工具箱用完了

#include <stdio.h>
#define YES 1 
#define NO 0 
#define EXIT '~'

int htoi(int s[]); 

int main(){
int i, c = 0;
int s[i];
for (i = 0; (c = getchar()!= EXIT); i++){
   s[i] = c;
   if(c == '\t' || c == '\n' || c == ' '){
      htoi(s[]);
   }else{
      putchar(c);
   }
  }
}

int htoi(int s[]){
int isHexidecimal;
int hexdigit; 
int n; 
int i = 0;


if(s[i] == '0'){
   i++; 
   if(s[i] == 'x' || s[i] == 'X')
      i++; 
}

isHexidecimal = YES;

while(isHexidecimal == YES){

if(s[i] >= '0' && s[i] <= 9){
   hexdigit += s[i] - '0';
   i++; 

}else if(s[i] >= 'a' && s[i] <= 'f'){
   hexdigit += s[i] - 'a' + 10; 
   i++; 

}else if(s[i] >= 'A' && s[i] <= 'F'){
   hexdigit += s[i] - 'A' + 10;
   i++;

}else{

   isHexidecimal = NO;

}if(isHexidecimal == YES) {

   n = n * 16 + hexdigit;
      }else {
       n += 0;
     }
   } 
      return n;
}


#包括
#定义是1
#定义0
#定义退出“~”
int htoi(int s[]);
int main(){
int i,c=0;
int s[i];
对于(i=0;(c=getchar()!=EXIT);i++){
s[i]=c;
如果(c='\t'| | c='\n'| | c=''){
htoi(s[]);
}否则{
普查尔(c);
}
}
}
int htoi(int s[]){
内生细菌;
整数六位数;
int n;
int i=0;
如果(s[i]=“0”){
i++;
如果(s[i]=“x”| s[i]=“x”)
i++;
}
isHexidecimal=是;
而(isHexidecimal==是){
如果(s[i]>='0'和&s[i]='a'和&s[i]='a'和&s[i]
无效,它没有任何意义。只需将指针传递到数组

htoi(s);


函数参数列表中的数组声明
ints[]
inthtoi()
的解释就像它是指向类型
int*s

的指针一样,他可能想看看你所说的指针是从哪里来的。我明白。因为我提出了一个带迭代器的数组,它的工作原理就像带指针的数组一样,因此它的工作原理与我预想的不一样。
int I,c=0;int s[i];
由于
i
没有特定值,
int s[i];
试图声明一个没有特定大小的数组。哎哟。哎哟。谢谢,大卫·桑。好吧,但我很好奇。为什么这个技巧在Java中有效而在C中无效?作业的链接?我正在通过C编程语言书第二版学习C,所以这里有些东西我有点迷糊了。“I,C=0”中的链在哪里?它不是中的“i=c=0”…只有“int”保留在中,它不会尝试分配给元组!因此您需要将最大大小设置为s,在for循环中检查它(或冒缓冲区溢出的风险),并且您当前的代码对于3个分隔符之一之后的第二个值输入将无法正常工作。实际上,由于您的字符串永远不会以\0结尾,因此我不确定它是否可以工作,即使对于第一个值!或任何其他有效的停止条件,因为您没有使用字符串…现在您正在解析未初始化的内存,它可能包含您的字符串之后的任何内容价值观
htoi(s);
int htoi(int s[]);