【发布时间】:2018-10-30 11:03:47
【问题描述】:
我的程序应该从标准输入读取并将输入交给系统 - 以防输入不等于“退出”。
除非第二个输入比第一个长,否则效果很好。
例如,如果第一个输入是“hello”,第二个输入是“hellohello”,则输入会分成“hello”和“ello”。
我猜问题是缓冲区 s 在循环时没有正确清除。因此我使用了memset(),但不幸的是我没有得到我想要的结果。
任何人都可以看到错误吗?
非常感谢!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 1024
int main(){
char *s = (char *)malloc(MAX);
char *temp = NULL;
while(fgets(s, (sizeof(s)-1), stdin)!= NULL){
temp = s+(strlen(s)-1);
*temp = '\0';
if (strcmp(s,"exit")==0){
break;
} else {
system(s);
}
memset(s, 0, MAX);
}
free(s);
return 0;
}
【问题讨论】:
-
提示:尝试打印
sizeof(s)的值。你会发现这不是你所期望的。 -
谢谢!这有助于解决我的问题
-
system() 不关心尾随的换行符,因此无需剥离它。