n****u 发帖数: 467 | 1 #include
int main(){
char *s="test";
sprintf(s,"t");
printf("%s\n",s);
}
Bus error。C 的小例子,是先初始化,然后想用sprintf重新赋值。 |
N***m 发帖数: 4460 | 2 sprintf是这样用的吗?我都没看懂你想做什么
【在 n****u 的大作中提到】 : #include : int main(){ : char *s="test"; : sprintf(s,"t"); : printf("%s\n",s); : } : Bus error。C 的小例子,是先初始化,然后想用sprintf重新赋值。
|
R*******e 发帖数: 36 | 3 1. s hasn't been allocated memory on the heap.
2. s pointes to the const string.
Alternative solution for your case:
int main(){
char *s= strdup("test");
sprintf(s,"t");
printf("%s\n",s);
free(s);
} |
X****r 发帖数: 3557 | 4
char s[] = "test";
【在 n****u 的大作中提到】 : #include : int main(){ : char *s="test"; : sprintf(s,"t"); : printf("%s\n",s); : } : Bus error。C 的小例子,是先初始化,然后想用sprintf重新赋值。
|
p***o 发帖数: 1252 | 5 回头LZ再问 sprintf(s, "Hello world!"); 会怎样你们又有的忙 ...
【在 X****r 的大作中提到】 : : char s[] = "test";
|
n****u 发帖数: 467 | 6 谢谢两位的答复,确实改好了。
不过为什么呢?我的初始赋值也合法的啊。
石头说的好像有矛盾,既然指向了常数组有着呢么会没分配内存呢?
烦劳哪位给解释一下三个的区别:
char *s="xxx";
char s[]="xxx";
char *s=strdup("xxx");
先谢过 |
n****u 发帖数: 467 | 7 呵呵,这个应该是长度的问题吧。
【在 p***o 的大作中提到】 : 回头LZ再问 sprintf(s, "Hello world!"); 会怎样你们又有的忙 ...
|
p***o 发帖数: 1252 | 8 这年头没啥特殊的需要还是别学C了吧 ...
字符串常量。什么叫"常量",不能改的就叫常量,和分没分配内存没关系。
在当前的调用栈上分配4字节,函数返回(其实是离开{})的时候自动释放。
malloc 4字节+strcpy,所以要记得free。
【在 n****u 的大作中提到】 : 谢谢两位的答复,确实改好了。 : 不过为什么呢?我的初始赋值也合法的啊。 : 石头说的好像有矛盾,既然指向了常数组有着呢么会没分配内存呢? : 烦劳哪位给解释一下三个的区别: : char *s="xxx"; : char s[]="xxx"; : char *s=strdup("xxx"); : 先谢过
|
n****u 发帖数: 467 | |