我正在尝试处理字符串以便更改文件中的某些内容。我从文件中读取一个包含命令和参数的字符串,用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;
}
答案 0 :(得分:1)
您有一些错误,首先command[20]
是未初始化的字符串,这将导致未定义的行为。其次,你没有检查第一个arg和第二个arg,所以我添加了一个评论的测试。此外,字符串不够长所以我删除了长度。最后,我测试传递给函数的NULL
指针。
编辑代码已添加到问题中以显示command[20]
已初始化,但它仍然太短而无法获取命令和合理的文件名(感谢@ameyCU)。
#include <stdio.h>
#include <string.h>
void create_file(char *argument)
{
if(argument == NULL)
printf("NULL pointer\n");
else
printf("Arg: %s\n", argument);
}
int main(void)
{
int i = -1;
char *token[5];
char command[] = "CREATE_FILE myfile.txt";
const char delim[] = " ";
token[++i] = strtok(command, delim);
while(token[i] != NULL)
token[++i] = strtok(NULL, delim);
if(token[0] != NULL && strcmp(token[0], "CREATE_FILE") == 0) // added test
create_file(token[1]);
return 0;
}
节目输出
Arg: myfile.txt
答案 1 :(得分:0)
数组定义中存在第一个错误:
const char delim[1] = " ";
在C ""
中是一个字符串 - 由'\0'
分隔的字符数组。这意味着“=”右边的内容是一串两个字符:
// ' ' + '\0'
//0x20 0x00
因此,这应该是两个字符的数组:
const char delim[2] = " ";
或
const char delim[] = " ";