如何修改C中的结构中的字符串



我正在尝试修改结构内的字段。我毫不费力地使用其他类型(即intfloat等),但是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

相关内容

  • 没有找到相关文章

最新更新