2013-12-08 176 views
0

我有代码:Ç指定字符串指针到其他字符串指针

#include<stdio.h> 

int main() 
{ 
    char *str = "aaaaaaaa"; 
    char *stt = "bbbbbbbb"; 
    *str = *stt; 
    printf("%s\n", str); 

return 0; 
} 

它给了我一个错误: 访问冲突写入位置, 有人能解释我为什么和如何在走到这一步?

+0

将其改写禁止文本字符串。 – BLUEPIXY

+0

看到这个http://stackoverflow.com/questions/17132248/modifying-the-data-section-in-c/17132278#17132278 – qwr

+2

你没有分配一个字符串指针到另一个字符串指针。 '* str = * stt;'和'str [0] = stt [0];'一样,它试图将第一个元素从一个地方复制到另一个地方。 – nos

回答

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 
+0

我会回应@ JensGustedt关于将你的字符串声明为'char const *'而不是'char *'的评论。 – godel9

3

你只分配第一个字符,你不应该因为字符串文字是不可变的。可以使用str = stt;来分配指针。

顺便说一句,因为他们不应该被改变,你最好使用const限定类型为

char const *str = "aaaaaaaa"; 
0

字符串文字是未改变的,也就是说,你不能修改字符串常量。这是因为它存储在只读部分。

试试这个

char str[] = "aaaaaaaa"; 
char stt[] = "bbbbbbbb"; 

char *pstr = str; 
char *pstt = stt; 

pstr = pstt; 
printf("%s\n", ptr);