在 C 中比较字符串时崩溃

标签 c string compare

好吧,我正在尝试编写一个函数来检查字符串数组中是否存在单词的字母(它对单词中的每个字母执行此操作)。经过一段时间的修改后,我发现它在尝试使用 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/

相关文章:

c - 在 C 中对 argv 中的两个字符串进行异或

c++ - 如何从单独的 .cpp 文件调用函数?

c# - 如何检查是否可以在 C# 中使用另一个字符串的字符获取一个字符串?

c - 在C中用空字符分割字符串

c - C 中空格等于 '\0' 吗?我怎样才能避免混淆它们?

c# - 将字符串转换为 Short

javascript - 比较美国日期标准 mm/dd/yyyy 中两个日期之间的差异

android - 比较两个数组列表元素并获取不常见的元素

c# - 比较版本标识符

c - 指向数组元素的指针