C语言 创建一个简单的字符串结构



所以我试图创建一个简单的字符串结构,它将包含字符串的文本和它的大小,至少现在。然而,我有问题分配我的结构。现在我只是想让1个字符的大小工作,但它只是崩溃在这一点上,我不知道我做错了什么分配,请帮助。

#include <stdio.h>
#include <stdlib.h>

typedef struct{
    char* text;
    int size;
}String;
String* getString();
int main(int argc, char** argv){
    String* str1 = getString();
    printf("%s",str1->text);    
    free(str1);
    return 0;
 }
String* getString(){
    String* str = (String*)malloc(sizeof(String));
    scanf("%s",str->text);
    str->size++;
    return str;
}

您需要为结构分配内存,但也为text字符串分配内存。

scanf("%s",str->text);

str->text是一个未初始化的指针

不为str->text分配任何内存。你没有初始化它,所以你的程序调用未定义的行为。

您需要使用str->text = malloc(MAX_SIZE);为它分配内存,其中MAX_SIZE是字符串的最大大小。另外,如果字符串很短,则可以使用常规的固定长度数组。

此外,您可能不希望使用scanf()来扫描字符串。一个特别的原因是%s使scanf()在第一个空白字符处停止。另一个原因是,如果缓冲区太小,防止scanf()写入缓冲区并不是微不足道的。用fgets()代替怎么样?

fgets(str->text, MAX_SIZE, stdin);
int main(int argc, char** argv){
    String* str1 = getString();
    printf("%s",str1->text);
    free(str1->text);
    free(str1);
    return 0;
 }
String* getString(){
    String* str = (String*)malloc(sizeof(String));//for struct
    str->size = 16;//initialize
    str->text = (char*)malloc(sizeof(char)*str->size);//for input text
    int ch, len;
    while(EOF!=(ch=fgetc(stdin)) && ch != 'n'){
        str->text[len++]=ch;
        if(str->size==len){
            str->text = realloc(str->text, sizeof(char)*(len+=16));
        }
    }
    str->text[len++]='';
    str->text = realloc(str->text, sizeof(char)*(str->size=len));
    return str;
}

相关内容

  • 没有找到相关文章

最新更新