【发布时间】:2015-12-27 15:30:24
【问题描述】:
我正在尝试处理字符串以更改文件中的某些内容。我从文件中读取了一个字符串,其中包含一个命令和一个参数,由space 字符分隔。我用标记分隔了这个数组。
现在我想传递第二个标记,它是函数的参数。我的问题是,当我运行我的程序时,屏幕冻结并且没有任何反应。这是我的分离方式和对函数的调用。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void create_file(char *argument)
{
//some code goes here
}
int main()
{
int i = -1;
char *token[5];
char command[20];
const char delim[1] = " ";
FILE *fin;
fin = fopen("mbr.op", "r");
while(fscanf(fin, "%[^\n]", command) == 1)
{
i = -1;
token[++i] = strtok(command, delim);
while(token[i] != NULL)
token[++i] = strtok(NULL, delim);
if(strcmp(token[0], "CREATE_FILE") == 0)
create_file(token[1]);
}
fclose(fin);
return 0;
}
【问题讨论】:
-
你在哪里设置了command的值?
-
它是从输入文件中读取的,抱歉我忘记添加了,现在修改代码...
-
const char delim[1] = " ";-->const char delim[2] = " ";或const char delim[ ] = " "; -
使用调试器进入代码并确定机器冻结的确切行
-
这些行:
token[++i] = strtok(command, delim); while(token[i] != NULL) token[++i] = strtok(NULL, delim);将使token[1]存在,如果 token[0] 不为 NULL,这有保证吗?如果不能保证,那么作为 create_file 输入的 token[1] 可能会指向任何地方。
标签: c arrays function character