【问题标题】:Pointing to char in string inside a struct pointer指向结构指针内字符串中的字符
【发布时间】:2020-03-23 13:04:40
【问题描述】:

通常在 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;
}

【问题讨论】:

  • *txt->substring 不是指针,它是一个字符,所以它不能被分配一个指针值。

标签: c pointers struct c-strings


【解决方案1】:

看来你的意思

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;
}

【讨论】:

    猜你喜欢
    • 2020-10-30
    • 2016-12-30
    • 2021-04-15
    • 1970-01-01
    • 2020-12-14
    • 2017-02-16
    • 2013-04-26
    • 2021-06-28
    相关资源
    最近更新 更多