这个应该是一个简单的.. 我在C中有以下代码:
#include <stdio.h>
#include <string.h>
main()
{
printf("Got to 1\n");
char *str;
*str='a';
printf("*str contains: %c",*str);
}
在看到Segmentation Fault(核心转储)错误之前,我没有打印“Got to 1”这一行。 有人能解释这个错误背后的原因吗?
答案 0 :(得分:2)
char *str;
只需将str
声明为指向char
的指针。它不分配内存。在将str
分配给'a'
之前,您需要为*str
分配内存。
永远不要将间接操作符应用于未初始化的指针 。这样做,调用未定义的行为。
请注意,在此处为*str
分配值很危险,因为它未初始化。如果它指向有效的内存地址,那么
*str = 'a';
将尝试修改存储在该位置的数据 如果此分配修改的位置属于程序,则它可能不正常。如果它属于操作系统,则程序很可能崩溃。
答案 1 :(得分:2)
您必须在要存储角色的位置分配内存。代码看起来像
char *str = malloc( sizeof( char ) );
*str='a';
printf("*str contains: %c\n",*str);
free( str );
或者你可以写
char c;
char *str = &c;
*str='a';
printf("*str contains: %c\n",*str);
此外,不需要包含标题<string.h>
,因为标题中的声明都没有在您的程序中使用。
答案 2 :(得分:0)
文件流标准输出被缓冲,不会立即写入显示器。
答案 3 :(得分:0)
首先为char *str
分配内存,然后分配值。
char *str=(char*)malloc(sizeof(char));
*str='a';
printf("*str contains: %c\n",*str);
free( str );