通常在 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/