【发布时间】:2014-10-28 17:59:43
【问题描述】:
练习.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define ARR 32
int main(void){
int MEM=64;
char arr[ARR],*p=(char *)calloc(MEM,(sizeof(char))),*q=NULL;
int i=0,j=1;
printf("\nEnter String : ");
while(j){
scanf(" %[^\n]s " ,arr);
if(j==1)
strcpy(p,arr);
else
strcat(p,arr);
if((j*ARR)==MEM){
MEM=MEM+(j*ARR);
q=realloc(p, MEM);
if(!(q)){
printf("\nNOT ENOUGH MEMORY\n");
goto END;
}
p=q;
}
for(i=0;i<(strlen(arr));++i){
if(arr[i]=='\n')
break;
}
if(arr[i]=='\n')
break;
++j;
}
printf("\n %s\n",p);
END: free(p);p=NULL;q=NULL;
return 0;
}
我正在尝试获取多个字符串输入。
我使用scanf(" %[^\n]s",arr); 而不是fgets(arr,ARR,stdin); 来获取输入,因为使用fgets,一旦我点击ENTER key,程序执行就会停止。但是使用scanf(" %[^\n]s",arr);,即使输入\n,程序也无法退出while() loop。
我想知道我在编写代码时犯的一个或多个错误。
【问题讨论】:
-
@Ani 这个
arr[strlen(arr)-1]='\0';可以和scanf(" %[^\n]s",arr);一起使用吗? -
您是否要读取多条行输入?或者只是在一行中有多个空格分隔的“单词”?
-
@JoachimPileborg
Read multiple lines of input. -
@Ani 它不起作用,无论是
fgets还是scanf。之前fgets使用按ENTER key退出执行,现在进入死循环。
标签: c string dynamic-memory-allocation realloc