当代码中找到子字符串aaa时,此代码会中断主字符串stringone。这段代码正在这样做,但它打印出界限而不是停在空字符处。
我得到的输出是这个
who cares if one more light goes out in the sky of a million stars, well i do if the star is you ;<@����P����p���Xz��������p���0zRx ����+zRx �$����FJ �?;*}D���� \�����A�C D|���eB�B�E �B(�H0�H8�M@r8A0A(B BB�8����p
我不明白为什么,我是否在我更新字符串的行中跳过NULL字符?
#include<stdio.h>
#include<string.h>
int main()
{
char *stringone = "who cares if aaa one more light goes out aaa in the sky of a million aaa stars, aaa well i do if the star is you \0";
char *breaker = "aaa";
while(stringone)
{
while(stringone != strstr(stringone, breaker) || stringone == NULL)
{
printf("%c",*stringone);
stringone++;
}
stringone = stringone + strlen(breaker) + 1;
printf("\n");
}
return 0;
}
答案 0 :(得分:0)
你应该使用strtok函数。参见示例:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main() {
char stringone[200] = "who cares if aaa one more light goes out aaa in the sky of a million aaa stars, aaa well i do if the star is you";
char breaker[10] = "aaa";
char *token = strtok(stringone, breaker);
while (token != NULL) {
printf("\n %s", token);
token = strtok(NULL, breaker);
}
return 0;
}
答案 1 :(得分:0)
仅当字符stringone != strstr(stringone, breaker)
位于breaker
的开头时,条件stringone
才会失败。只要匹配,代码就会按预期打印字符,但是当不再匹配时,strstr
会返回NULL
,条件会继续评估为true,甚至超过{ {1}}。
代码具有未定义的行为:它会打印不可预测的字符,并最终会在某些时候崩溃,因为continue stringone
不太可能会失败。
以下是修复代码的方法:
while (stringone)