使指针指向c中的字符数组

时间:2016-04-23 17:19:53

标签: c arrays pointers dynamic-memory-allocation

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedef struct node
{
    char *arr;
    struct node *next;
} node;

int main()
{
    char *word = (char *)malloc(sizeof(char) * 20);
    strcpy(word, "jon jones");

    node *sentence;
    sentence->arr = word;         //Problem here
    printf("%s", sentence->arr);

    return 0;
}

我正在尝试动态分配字符数组。在其中放置一个字符串,然后使节点的数据元素指向字符数组。当我运行程序时,我得到一个分段错误。我怀疑它来自我上面标注的那条线。我不明白的是,我做了句子 - &gt; arr指向单词数组的第一个元素。为什么会这样崩溃?提前致谢。

4 个答案:

答案 0 :(得分:0)

node *sentence;
sentence->arr = word;         //Problem here

指针sentence已声明,但未初始化和取消引用,因此会导致未定义的行为。

在取消引用内存之前分配内存 -

node *sentence;
sentence=malloc(sizeof(*sentence));

此外,如果您想制作节点,请使用strcpy代替此 -

sentence->arr = word;       // but allocate memory to `arr` before copying

答案 1 :(得分:0)

您忘记初始化您的句子变量。

以下为我工作

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedef struct node
{
    char *arr;
    struct node *next;
}node;

int main()
{
    char *word = (char *)malloc(sizeof(char) * 20);
    strcpy(word, "jon jones");

    node *sentence = (node*)malloc(sizeof(node)); // Initialize node area
    sentence->arr = word; 
    printf("%s", sentence->arr);

    return 0;
}

答案 2 :(得分:0)

您正在使用指向节点的指针,但尚未分配此节点。 使用 : node sentence; sentence.arr = word; printf("%s", sentence.arr);

应该会更好。 您还可以使用gdb找出导致错误的行。

答案 3 :(得分:0)

node分配内存word,或者使用struct而不是struct pointer。

node *sentence;
sentence = (node*)malloc(sizeof(node));
sentence->arr = word;         
printf("%s", sentence->arr);

node sentence;
sentence.arr = word;         
printf("%s", sentence->arr);