我正在尝试修改结构内的字段。我毫不费力地使用其他类型(即int
,float
等),但是char *
给我带来了问题。我想我必须做类似的事情:
typedef struct{
char *string_field;
} struct_name;
struct_name *struct_name1;
struct_name1 = (struct_name *) malloc(sizeof(struct_name));
strcpy(struct_name1->string_field, new_string);
printf("New string: %sn", struct_name1->string_field);
,但这给了我一个细分错误。您认为我会遇到这个问题是什么原因?最初,我以为char *string_field
也许还不够大,但是我手动将其大小更改为100尺寸(足够多),但我仍然遇到了这个问题。
您为结构保留内存,其中包括指向字符串的指针,但不包括字符串内容的空间。为字符串内容保留内存,并让结构的指针指向它;然后,您可以将newstring
的内容复制到该内存:
struct_name1->string_field = malloc(strlen(new_string)+1);
strcpy(struct_name1->string_field, new_string);
为结构和字符串分配内存。在下面的示例中,字符串中有一个63个字符的空间。切记释放分配的内存。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct{
char *string_field;
} struct_name;
int main()
{
struct_name *struct_name1;
struct_name1 = malloc(sizeof(struct_name));
struct_name1->string_field = malloc(64*sizeof(char));
strcpy(struct_name1->string_field, "new_string");
printf("New string: %sn", struct_name1->string_field);
free(struct_name1->string_field);
free(struct_name1);
return 0;
}
输出:
New string: new_string