字符串指针作为C中的参数?
因此,我尝试用一些C代码执行以下操作:字符串指针作为C中的参数?,c,string,pointers,C,String,Pointers,因此,我尝试用一些C代码执行以下操作: int eval_setence(char *words){ ... } void main(){ char *words[8]; eval_setence(words); } 但是我不知道为什么代码没有编译,我假设函数得到了一个指向words[8]的双指针。有人能解释一下发生了什么事吗 我试图在函数中使用单词[8]进行操作,即: if(words[i] == 'Wow') ... 您的words变量是指向char指针的指针,您应该这样定义数组: t
int eval_setence(char *words){
...
}
void main(){
char *words[8];
eval_setence(words);
}
但是我不知道为什么代码没有编译,我假设函数得到了一个指向words[8]
的双指针。有人能解释一下发生了什么事吗
我试图在函数中使用单词[8]
进行操作,即:
if(words[i] == 'Wow')
...
您的words变量是指向char指针的指针,您应该这样定义数组:
type var[len];
不是:
或者,如果您需要一个二维数组(我想您需要),您应该这样定义它:
type var[len1][len2];
然而,这应该是微不足道的
您的words变量是指向char指针的指针,您应该这样定义数组:
type var[len];
不是:
或者,如果您需要一个二维数组(我想您需要),您应该这样定义它:
type var[len1][len2];
然而,这应该是微不足道的。问题在于
char *words[8];
将words
声明为指向字符的指针数组。当它被传递给一个函数时,它被转换成一个指向chars的指针。如果您想要一个“字符串”数组,那么这是正确的,您需要将函数原型更改为期望**char
切题地说,if(words[i]='Wow')
不好,原因有很多。首先,”
字符用于表示单个字符。字符串是用“
括起来的。其次,字符串比较不能用这种比较来完成。您需要使用
问题是
char *words[8];
将单词
声明为指向字符的指针数组。当将其传递给函数时,它将转换为指向字符指针的指针。如果您想要一个“字符串”数组,则这是正确的,并且您需要将函数原型更改为预期的**char
切题地说,if(words[i]='Wow')
不好有很多原因。首先,'
字符用于表示单个字符。字符串用“
括起来。其次,字符串比较不能通过这种比较来完成。你需要使用类似的工具
请发布编译器输出。使用
char**
作为函数参数。还要注意的是,您不能将字符串与==
进行比较,字符串必须是双引号,而不是单引号。@Zetsuno所以请按照编译器所说的去做。您应该能够使用strlen(words[0])
,strlen(words[1])
等。@Zetsuno:这是非标准的。C标准规定了intmain(void)
或intmain(intargc,char*argv[])
或同等标准。允许使用其他实现定义的表单,但实际上没有充分的理由使用void main()
。引入void
关键字的标准也将int
指定为main
的返回类型。请参阅中的问题11.12a和以下内容。请发布编译器输出。使用char**
作为函数参数。还要注意的是,您不能将字符串与==
进行比较,字符串必须是双引号,而不是单引号。@Zetsuno所以请按照编译器所说的去做。您应该能够使用strlen(words[0])
,strlen(words[1])
等。@Zetsuno:这是非标准的。C标准规定了intmain(void)
或intmain(intargc,char*argv[])
或同等标准。允许使用其他实现定义的表单,但实际上没有充分的理由使用void main()
。引入void
关键字的标准也将int
指定为main
的返回类型。请参阅问题11.12a和后面的。你是对的,这很琐碎,我只是想得太多了,谢谢!你说得对,这很琐碎,我只是想得太多了,谢谢你!