c - 指向结构指针内字符串中的字符

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

最佳答案

看来你的意思是

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

关于c - 指向结构指针内字符串中的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59079269/

相关文章:

c - for循环没有结束

c - C 中的特殊 #define 选项

c - 反转字符串时获取 "Segmentation fault Core Dumped Error "

c - C中结构中的多个灵活数组?

arrays - 自己结构数组的JSON编码

c++ - 如何在 struct 数据结构中使用 map STL 并初始化 map 然后引用它?

c++ - 内存访问回调?

c - 什么是 C 运行时库?

C语言打印指针中的值?

c - 在函数调用期间将哪些值压入堆栈?