如何制作扫描用户输入(文本)的C程序并将其保存在动态字符串中

时间:2014-04-06 17:02:56

标签: c string dynamic

我想使用C程序读取用户(文本)的输入,这是我的代码:

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

int main(){
    int i=0,x=0;
    char *c;
    c[i]=(char*)malloc(sizeof(char));
    while(1){
        c[i]=getc(stdin);
        if(c[i]=='\n')
            break;
        i++;
        realloc(c, i+1 );
    }
    c[i]='\0';
    //printf("\n%d",strlen(c));
    printf("\n\n%s",c);
return 0;
}

该程序在编译时会在c[i]=(char*)malloc(sizeof(char));处发出1个警告:

  

警告:赋值在没有强制转换的情况下从指针生成整数[默认启用]

此程序成功运行,但如果我从代码中删除x=0,则有:

  

分段错误(核心转储)

我应该对此代码进行哪些更改,以便它可以在没有警告或无效的随机变量(如x=0)的情况下工作。

谢谢!

3 个答案:

答案 0 :(得分:1)

只需更换此

即可
   c[i]=(char*)malloc(sizeof(char));

用这个

   c = (char*)malloc(sizeof(char));

并删除演员表,你不需要C

   c = malloc(sizeof(char));

答案 1 :(得分:1)

试试这个

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

int main(){
    int i=0;
    char *c=(char*)malloc(sizeof(char));
    while(1){
        c[i]=getc(stdin);
        if(c[i]=='\n')
            break;
        i++;
    }
    c[i]='\0';
    printf("\n\n%s",c);
    return 0;
}

答案 2 :(得分:1)

正如@Dabo所说,调整作业。

c = malloc(sizeof(char));

以下是其他建议:

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

int main() {
    // Use size_t rather than int for index
    size_t i=0;
    char *c;
    c = malloc(1);
    if (c == NULL) return 1; // Out of memory  
    while(1){
        // To detect EOF condition, use type `int` for get() result
        int ch = getc(stdin);
        if(ch == EOF || ch == '\n') {
            break;
        }
        c[i++] = ch;
        // Important, test & save new pointer 
        char *c2 = realloc(c, i+1 );
        if (c2 == NULL) return 1; // Out of memory  
        c = c2;
    }
    c[i] = '\0';
    // Use %zu when printing size_t variables
    printf("\n%zu",strlen(c));
    printf("\n\n%s",c);
    // Good practice to allocated free memory
    free(c);
   return 0;
}

修改:修复