Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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
字符串指针作为C中的参数?_C_String_Pointers - Fatal编程技术网

字符串指针作为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

因此,我尝试用一些C代码执行以下操作:

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和后面的。你是对的,这很琐碎,我只是想得太多了,谢谢!你说得对,这很琐碎,我只是想得太多了,谢谢你!