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

问题描述

我正在编写一个将十六进制值转换为数字值的程序,为此我已经做到了,因此整数函数 htoi(char s[i]) 接受 char 数组。

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

我尝试将 char s[] 之类的数组更改为 int s[i],因为 char 只是一个较小的 int,对吗?因此,当我将其更改为 int 时,编译器会抱怨 htoi{s[i]) (s[] 现在是一个 int )从整数中生成一个指针,而无需强制转换。

所以,我意识到数组中的迭代器只不过是指向数组中元素的指针,好吧。太好了,所以我删除了我和。. . 它需要在 ']' 标记之前有一个表达式。

我已经用尽了我的工具包。

#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;
}


我希望 main 方法运行分配给变量 c 的 getchar() 函数,然后将变量 c 分配给数组,然后将所述数组传递给 htoi。

htoi 会将十六进制返回整数值,如果我没有输入有效的十六进制值,则返回“0”,或者返回十六进制值并由于循环没有输入有效的十六进制值而终止。

标签: c

解决方案


htoi(s[]);

无效,不代表什么。只需将指针传递给数组。

htoi(s);

int htoi(int s[]);

int s[]函数参数列表中的数组声明int htoi( <here> )被完全解释为好像它是指向类型的指针int *s


推荐阅读