我有代码:Ç指定字符串指针到其他字符串指针
#include<stdio.h>
int main()
{
char *str = "aaaaaaaa";
char *stt = "bbbbbbbb";
*str = *stt;
printf("%s\n", str);
return 0;
}
它给了我一个错误: 访问冲突写入位置, 有人能解释我为什么和如何在走到这一步?
我有代码:Ç指定字符串指针到其他字符串指针
#include<stdio.h>
int main()
{
char *str = "aaaaaaaa";
char *stt = "bbbbbbbb";
*str = *stt;
printf("%s\n", str);
return 0;
}
它给了我一个错误: 访问冲突写入位置, 有人能解释我为什么和如何在走到这一步?
像"aaaaaaaa"
这样的字符串文字是只读的,而且您的代码正试图覆盖由str
指向的字符串的第一个字符。如果这是你想要做什么,你需要做这样的事情:
char str[9];
char *stt = "bbbbbbbb";
strcpy(str, "aaaaaaaa");
*str = *stt;
printf("%s\n", str); // prints: baaaaaaa
当然,它更可能是你真正想要的是这样的:
str = stt;
printf("%s\n", str); // prints: bbbbbbbb
我会回应@ JensGustedt关于将你的字符串声明为'char const *'而不是'char *'的评论。 – godel9
你只分配第一个字符,你不应该因为字符串文字是不可变的。可以使用str = stt;
来分配指针。
顺便说一句,因为他们不应该被改变,你最好使用const
限定类型为
char const *str = "aaaaaaaa";
字符串文字是未改变的,也就是说,你不能修改字符串常量。这是因为它存储在只读部分。
试试这个
char str[] = "aaaaaaaa";
char stt[] = "bbbbbbbb";
char *pstr = str;
char *pstt = stt;
pstr = pstt;
printf("%s\n", ptr);
将其改写禁止文本字符串。 – BLUEPIXY
看到这个http://stackoverflow.com/questions/17132248/modifying-the-data-section-in-c/17132278#17132278 – qwr
你没有分配一个字符串指针到另一个字符串指针。 '* str = * stt;'和'str [0] = stt [0];'一样,它试图将第一个元素从一个地方复制到另一个地方。 – nos