c-即使为变量ret分配了内存,运行时也会输出分段故障



输出为分段故障(核心转储(。错误线是第12行,但我不明白为什么这会成为一个问题。如果ret被分配了一个内存位置,并且等于某个值,为什么会输出分段错误?

代码为:

#include <stdio.h>
#include <string.h>
int main() {
const char *tmp = "This string literal is arbitrary";
char *ret;
ret = strstr(tmp, "literal");
strcpy(ret, "");
if (ret)
printf("found substring at address %pn", ret);
else
printf("no substring foundn");

return 0;
}

修改字符串文字是未定义的行为,tmp指向这样的文字。如果你想修改它,你需要对被允许修改的文字进行复制-strstr()不这样做,它只是给你一个指向原始文字的指针。

当然,如果你使用下面的表格,这个特殊的问题就会消失:

char tmp[] = "This string literal is arbitrary";

这在功能上为您提供了文字的可写副本。

相关内容

  • 没有找到相关文章

最新更新