我试图用我的函数读取用户输入问题的句子,当我尝试调用它时跳过第二次尝试。任何解决方案?
void readString(char *array, char * prompt, int size) {
printf("%s", prompt);
char c; int count=0;
char * send = array;
while ((c = getchar()) != '\n') {
send[count] = c; count++;
if (size < count){ free(array); break; } //lets u reserve the last index for '\0'
}
}
以下是尝试调用它的方法:
char obligation[1500];
char dodatno[1500];
readString(obligation, "Enter obligation", 1500);
readString(dodatno, "Enter hours", 1500);
以下是输入示例: “这是一句话”
所以后来我做了这个:
printf(" %s | %s \n",obligation, dodatno);
并获得:
这是一句话|这是另一句话
答案 0 :(得分:4)
在readString()
函数
array
未由malloc()
或系列动态分配内存。
使用未分配内存的指针调用free()
会动态创建未定义的行为。
getchar()
返回int
。您应该将c
的类型更改为int c
。
此外,readString()
中的输入没有空终止,因此您无法直接将数组用作 string 。您需要自己对数组进行空终止,将其用作读缓冲区,以便稍后用作字符串。
答案 1 :(得分:3)
你去:)
void readString(char *array, char * prompt, int size) {
printf("%s", prompt);
int c; int count=0;
while((c = getchar()) != '\n' && c != EOF);
while ((c = getchar()) != '\n') {
array[count] = c; count++;
if (count == (size - 1)) { break; }
}
array[count] = '\0';
}