将char分配给char指针时出现分段错误(核心转储)

时间:2014-09-28 05:53:28

标签: c pointers

这个应该是一个简单的.. 我在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”这一行。 有人能解释这个错误背后的原因吗?

4 个答案:

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