好吧,我正在尝试编写一个函数来检查字符串数组中是否存在单词的字母(它对单词中的每个字母执行此操作)。经过一段时间的修改后,我发现它在尝试使用 strcmp() 时崩溃了。我不知道我做错了什么,因为我刚刚开始学习 C,所以任何帮助将不胜感激。这是函数:
char SingleChar(char *lex, int wordnum,char *word){
int i,j,k;
for(i=0;i<strlen(word);i++){
for(j=0;j<wordnum;j++){
for(k=0;k<strlen(lex[j]);k++){
if(strcmp(word[i],lex[k])){
return word[i];
}
}
}
}
return 0;
}
最佳答案
您对 char *
的含义有误解。它是一个指向字符的指针。在 C 语言中,字符串只是一个指向字符的指针,由其他字符和空终止符组成。在您的情况下,这意味着 lex
是单个字符串,而不是字符串列表。
即
char *a = "imastring";
表示 a 是包含字符 [i][m][a][s][t][r 的连续内存块的地址][i][n][g][\0]。在 C 中,空终止符用于表示字符串的结尾。
这意味着当您调用 strlen(lex[j])
时,您只是引用 lex 中的单个字符,然后读取到字符串的末尾,因此您的结果将是单调递减。
您可能想要做的是使用双指针。 char ** list
将指向一个地址,该地址指向引用连续字符 block 的地址。
char ** list = (char **)malloc(sizeof(char *) * 5);
将为您分配 5 个连续的内存地址,然后这些地址可以指向字符串本身。您可以按如下方式为它们分配值。
列表[0] = a
我希望这会有所帮助。
关于在 C 中比较字符串时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29571971/