我是新的@programming,我有以下问题: 我的程序启动命令提示符:如
input>
然后用户输入一个字符串,像merge xyz.txt
这样的命令
我终于让它运行了,我的程序只从头开始读到space
。所以
printf(“%s”,命令);
output: merge
如果用户输入一个字符串,其中命令不是'一个命令或没有值,它应该再次开始打印input>
,并且在命令完成后,它应该再次打印input>
。我试图将所有内容放入while循环中:
void cmdLine()
{
char *whole_entrie = calloc(1,1);
char buffer[BUFFERSIZE];
int dummy = 0;
while(dummy == 0)
{
printf("input>");
fgets(buffer, BUFFERSIZE, stdin);
whole_entrie = realloc(whole_entrie, strlen(buffer) + 1);
strcpy(whole_entrie, buffer);
strcpy(buffer, ""); //reset because i thought the programm uses old entries?????ß
int cnt = 0;
char command[MAX_COMMAND_LENGTH];
while(cnt <= MAX_COMMAND_LENGTH)
{
if(whole_entrie[cnt] == ' ')
{
break;
}
else
{
command[cnt] = whole_entrie[cnt];
cnt++;
}
}
if(strcmp(command, "merge") == 1)
{
merge();
}
else if(strcmp(command, "close") ==1)
{
free(whole_entrie);
dummy = 1;
}
BUT:
它随机做了别的事情。有时我得到一个双重免费错误,或者当我输入printf()
时它返回0或显示merge
xxxkdlf
等等,有人可以帮助我,我是对这个该死的代码感到沮丧!!!
问候
答案 0 :(得分:1)
你为什么要使用realloc()
?我没有看到任何动态分配的原因。为什么不能只处理buffer
内容?
按照C99标准:
7.19.7.2 fgets功能概要
...
fgets函数最多读取的数量少于1 由流指向的流中的n指定的字符 s指向的数组。 a后没有读取其他字符 换行符(保留)或文件结束后。空 在读入最后一个字符后立即写入字符 数组。
还有一点。为什么这么奇怪memcmp()
来电?来自man memcmp
:
strcmp()和strncmp()函数返回一个小于的整数, 如果s1(或其前n个字节)是等于或大于零 发现分别小于,匹配或大于s2。
好的,最后(也许)第三。您检查内的空格(“
whole_entrie
”)是否已停止。但是,如果您只是在最后输入'\n'
命令,则会复制它,包括“\n
”,以便strcmp()
无法检查您的命令。
答案 1 :(得分:0)
当您realloc()
时,重新分配的内存区域的地址可能会发生变化。但是,您不会将此更改分配给变量whole_entrie
。这是问题所在:
input = realloc(whole_entrie, strlen(buffer) + 1);