为什么每个单词都进入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';
}
有人知道为什么这些单词以结尾为"
或,
吗?
答案 0 :(得分:5)
仔细看这两行中的括号:
if((word[strlen(word - 1)] == ',')){
word[strlen(word) - 1] == '\0';
}
Here ^ ^
不对称是错误的。在单词开头之前开始搜索是不确定的行为。我认为第二行更接近正确,但是您需要将==
替换为=
以分配新值(如paxdiablo在comment中指出的那样) 。此问题还会影响代码的上一段。
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} }表示“ restrict
和s1
之间没有重叠)。使用s2
(确实允许重叠的副本),但是您需要知道字符串的长度,并记住复制空字节,以便输出也是字符串。