在结构指针中指向字符串中的char

时间:2019-11-27 22:26:26

标签: c pointers struct c-strings

通常在C语言中,您可以指向字符串的特定字符以获得子字符串。示例:

char string[10];
strcpy(string, "foo bar");
char *substring = &string[4];

// string = "foo bar"
// substring = "bar"

但是当您处理结构指针时,语法是什么?我以为会是这样,但它会返回垃圾数据:

struct line
{
    char string[10];
    char substring[10];
};

void some_function(struct line *txt)
{
    *(txt->substring) = &(txt->string[4]);
}

int main()
{
    struct line text;
    strcpy(text.string, "foo bar");

    some_function(&text);
    printf("\n-%s-\n", text.string);
    printf("\n-%s-", text.substring); // returns garbage data

    return 0;
}

1 个答案:

答案 0 :(得分:4)

看来你的意思

void some_function(struct line *txt)
{
    strcpy( txt->substring, txt->string + 4 );
}

数据成员子字符串没有指针类型。它是一个数组。因此,您可能无法将指针分配给数组。您可以将一个数组的元素复制到另一数组。

关于此表达声明

*(txt->substring) = &(txt->string[4]);

然后,左操作数的类型为char,而右操作数的类型为char *。因此,无论如何,这种分配是没有意义的。

结构是否定义为

struct line
{
    char string[10];
    char *substring;
};

然后在您可以编写的函数中

void some_function(struct line *txt)
{
    txt->substring = txt->string + 4;
}