标记字符串后无法打印结果

时间:2019-11-22 09:26:55

标签: c

我需要帮助弄清楚以下代码为什么不起作用。我想将buf字符串拆分为标记,然后将其保存到struct char * array字段中。并打印出其内容。

#include <stdio.h>
#include <string.h>
struct parser{
    char *array[10];
};

void stages(char buf[]){
    struct parser t;
    int i = 0;
    char *p = strtok (buf, "|");

    while (p != NULL)
    {
        t.array[i++] = p;
        p = strtok (NULL, "|");
    }

}

int main() {
    struct parser t;
    char buf[] ="ls < one | more | sort";
    int i = 0;

    stages(buf);
    for (i = 0; i < 3; i++) 
        printf("%s\n", t.array[i]);

    return 0;
}

2 个答案:

答案 0 :(得分:0)

函数t中的变量stages是局部变量。

这与main中的变量t不同。

要在t中打印main,您需要将指向struct parser的指针传递给该函数,并删除局部变量t

#include <stdio.h>
#include <string.h>
struct parser{
    char *array[10];
};

void stages(char buf[],struct parser *ptr){
    int i = 0;
    char *p = strtok (buf, "|");

    while (p != NULL)
    {
        ptr->array[i++] = p;
        p = strtok (NULL, "|");
    }

}

int main() {
    struct parser t;
    char buf[] ="ls < one | more | sort";
    int i = 0;

    stages(buf,&t);
    for (i = 0; i < 3; i++) 
        printf("%s\n", t.array[i]);

    return 0;
}

答案 1 :(得分:0)

分配给结构解析器t的内存,在名为void stage(char buf [])的函数中; 将在堆栈中,函数返回后,该内存将被删除 通过编译器。因此,您无法在main中打印struct parser t的值。

如果要打印值,则可以从函数中返回该结构 或者您可以将指针从main传递到该函数。