如何将字符串传递给C

时间:2015-12-27 15:30:25

标签: c arrays function character

我正在尝试处理字符串以便更改文件中的某些内容。我从文件中读取一个包含命令和参数的字符串,用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;
}

2 个答案:

答案 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[] = " ";