将整数转换并存储到char指针

时间:2016-07-09 14:24:09

标签: c pointers segmentation-fault printf

我正在尝试将整数转换并存储到char指针中。到目前为止,这就是我所拥有的。

char * str1;
sprintf(str1,"%d",10);

我一直收到Segmentation fault错误。

如果以下代码有效,那为什么不上述?

char * str1;
str1 = "Hello World";
printf("%s\n", str1);

3 个答案:

答案 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);

两种方法安静不同,但在这个问题中任何方法都可以使用

相关问题