我正在尝试将整数转换并存储到char指针中。到目前为止,这就是我所拥有的。
char * str1;
sprintf(str1,"%d",10);
我一直收到Segmentation fault
错误。
如果以下代码有效,那为什么不上述?
char * str1;
str1 = "Hello World";
printf("%s\n", str1);
答案 0 :(得分:1)
声明char *str
不会创建一块内存。它只是声明您有一个类型为char *
的指针和标识符str
。
注意有限的堆栈空间,你不能从静态分配的函数返回str
char str[10];
sprintf(str1,"%d",10);
注意,为了避免内存泄漏,在完成字符串后,必须调用free
。
#include <stdlib.h>
...
char *str = malloc(10);
sprintf(str1,"%d",10);
...
答案 1 :(得分:0)
在第一种情况下,在使用之前
sprintf(str1,"%d",10);
您需要为str1
分配内存。否则,您将最终使用未初始化的内存,这可能会指向无效的内存位置,而内存位置又会调用undefined behavior。
考虑一个数组,比如
char str1[32] = {0};
snprintf(str1, 31, "%d",10);
可以帮到你。
在第二种情况下,str1
不是未初始化,它指向字符串文字的开头,因此访问有效。
答案 2 :(得分:0)
显然没有记忆来存储字符
char * str1 = malloc(sizeof(char)*10); //#include <stdlib.h> for malloc to allocate memory for keeping the chars
sprintf(str1,"%d",10);
可能你是c语言的新手,使用char数组而不是指针来避免混淆。
char str1[10]; // this will allocate memory while defination
sprintf(str1,"%d",10);
两种方法安静不同,但在这个问题中任何方法都可以使用