我正在开发一个简单的c程序,它接受一个命令并运行一个简单的C函数,因此你不必编译整个程序就可以看到它的工作原理。在{I}尝试接受输入时scanf
工作正常。我想要有效率,首先按空格分割输入,我在上面做了一个函数。然后让if语句比较第一项,即命令名。但每当我运行它时,当它开始创建多个新行并打印出输入的文本时,它表现得很奇怪。我希望它将分割文本的第一项存储在变量中并打印第一项,而是按顺序打印出每个项目。这是代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void displayHeader(){
printf("SuperCMD version 1.3. \nType \"help\" for a list of commands.\n");
}
char * strspltf(char * str, char * delim, int index){
char * pch = strtok(str, delim);
int i = 0;
while(pch != NULL){
if(i == index){
return pch;
}
pch = strtok(NULL, delim);
i++;
}
return NULL;
}
int main(){
displayHeader();
char command[] = "";
char dir[] = "C:\\";
while(strcmp(command, "exit") != 0){
printf("%s > ", dir);
scanf("%s", command);
char * res = strspltf(command, " ", 0);
printf("%s\n", strspltf(command, " ", 0));
}
return 0;
}
top上的函数返回由另一个字符串拆分的字符串的特定索引。有人能告诉我我做错了什么以及如何解决它?此外,当我键入“退出”时,它崩溃了。为什么?
答案 0 :(得分:1)
此:
char command[] = "";
错了。除了一个空字符串之外,您没有为数组分配和空间。然后调用scanf("%s", command);
,因为没有分配内存来保存scanf的结果,你用垃圾覆盖堆栈。将声明更改为:
#define MAX_COMMAND 50 // or whatever size you need.
char command[MAX_COMMAND];
...
答案 1 :(得分:1)
您的本地变量command
是单个元素数组。它不足以将用户输入的输入命令保持为scanf
输入。
将command
重新定义为100个元素的数组。
char command[100];