检查字符串中的特殊字符(在C中)

时间:2018-12-14 01:07:40

标签: c

为什么每个单词都进入if语句,以检查字符串是否以','结尾,而一个单词则检查字符串是否以'“'结尾。

我看到像这样的字

"held"
"hand"
"bond"
"like"
"was"
"her"
"familliar"

(以上只是输入if语句的单词示例

void RemoveOddSigns(char *word){

    if(word[0] == '"'){
        strncpy(word, word + 1, strlen(word));
    }

    if(word[strlen(word - 1)] == '"'){
        word[strlen(word) - 1] == '\0';
    }

    if((word[strlen(word - 1)] == ',')){
        word[strlen(word) - 1] == '\0';
    }

有人知道为什么这些单词以结尾为",吗?

1 个答案:

答案 0 :(得分:5)

仔细看这两行中的括号:

if((word[strlen(word - 1)] == ',')){
    word[strlen(word) - 1] == '\0';
}
           Here    ^   ^

不对称是错误的。在单词开头之前开始搜索是不确定的行为。我认为第二行更接近正确,但是您需要将==替换为=以分配新值(如paxdiablocomment中指出的那样) 。此问题还会影响代码的上一段。

if (word[strlen(word) - 1] == ',')
    word[strlen(word) - 1] = '\0';

从技术上讲,您在strncpy(word, word + 1, strlen(word));上有未定义的行为-源数组和目标数组不允许重叠(strncpy()的正式原型是char *strcat(char * restrict s1, const char * restrict s2);,其中{{1} }表示“ restricts1之间没有重叠)。使用s2(确实允许重叠的副本),但是您需要知道字符串的长度,并记住复制空字节,以便输出也是字符串。