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