gpt4 book ai didi

c - 用另一个字符串替换部分字符串会导致段错误

转载 作者:太空宇宙 更新时间:2023-11-04 06:26:07 25 4
gpt4 key购买 nike

我想做一些简单的事情,但我已经为此苦苦思索了太久。我有一个总是以特定“标记”结尾的字符串。在“++”下方的情况下。我想用更短的标记替换结束标记,比方说“#”。

strstr 返回 NULL 或指向初始结束标记的指针。strcpy 应该获取从 strstr 返回的指针并用“#\0”覆盖“++”。

至少这是我认为它应该做的。相反,我收到“赋值从指针生成整数而不进行强制转换”警告。我已经尝试了 strcpy(*newThing, "#"); 和其他一些东西。不给出错误的东西会导致段错误。

在这种情况下,C 是否正在从堆栈上的某个不可变空间中获取原始字符串的存储空间?我需要使用其中一个“分配”吗?我也试过了,但可能遗漏了一些东西。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main() {
char *thing="ssssssssssssssss++";
char *newThing;

newThing = strstr(thing, "++");
strcpy(newThing, "#");
printf("%s\n", thing);

exit(0);
}

最佳答案

你的问题是 thing 是一个指向字符串文字的指针。在过去,您可以这样做,但当前的编译器将字符串文字存储在不可写内存中。

因此,当您执行代码时,您会得到一个访问冲突写入位置(或等效消息)。

解决这个问题的最简单方法:声明一个自动数组用字符串文字初始化,一切都很好:

char thing[]="ssssssssssssssss++";

(数组和指针不完全一样...)

关于c - 用另一个字符串替换部分字符串会导致段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26684239/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com