我使用sprintf
尝试了以下代码,但在某些情况下崩溃并在另一种情况下正常工作。有人能解释一下吗?
#include <stdio.h>
#include <stdlib.h>
int main()
{
//char *s = malloc(20); //works fine
//char *s = ""; //does not work, no matter what the initial value is
char s[20]; //works fine
sprintf(s, "%s", "hello world");
printf("%s",s);
return 0;
}
答案 0 :(得分:3)
当你这样做时:
char *s = "";
或
char *s = "longer string";
您正在创建一个可能放在只读内存中的文字字符串。所以你以后无法改变。
如果您尝试执行以下语法:
char s[] = "...";
数组将使用文字字符串进行初始化,您可以稍后修改原始数组。
网站上的建议问题: