我需要帮助弄清楚以下代码为什么不起作用。我想将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;
}
答案 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传递到该函数。