我想使用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
)的情况下工作。
谢谢!
答案 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;
}
修改:修复