#include<stdio.h>
#include<ctype.h>
int main() {
char* start = "There are no";
char* d = start;
char* s = d;
while (s) {
char c = *s++;
if (ispunct(c) || isspace(c)) {
continue;
}
*d++ = c;
}
printf("%s\n", start);
}
我是c / c ++的新手并试图理解操纵字符串。上面的代码扫描字符串并跳过标点和空格并打印字符串,没有任何标点符号和空格。
当我运行它时,我得到“总线错误:10”
我做错了什么?
答案 0 :(得分:1)
start
是string literal
,隐含const
,修改它会调用未定义的行为。尝试:
char start[] = "There are no";
或只使用字符串:
std::string start("There are no");
答案 1 :(得分:1)
您正在检查循环条件中的错误。您应该检查*s
。 s
是一个指针,它几乎不会成为代码中的0
。最终,您进入未映射的内存区域,导致SIGBUS
。