这个问题被问了很多,但特别是关于包含指针的结构,并没有完全帮助我的情况。我想要做的是 strtok() 第一个也是唯一一个基于“|”的命令行参数 特点。例如,它将类似于:“ls -l | grep ^d | wc -l”。完成后,我想将我标记的项目写入 LOGFILE。这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <signal.h>
void main(void)
{
FILE *logfp = fopen("LOGFILE", "w");
char * commands;
char * container[4];
char commandLine[] = ("test|test2|test3|test4\n");
int i = 0;
commands = strtok(commandLine, "|");
while(commands != NULL)
{
container[i] = commands;
printf("Being stored in container: %s\n", container[i]);
i++;
commands = strtok(NULL, "|");
}
printf("This is the size of the container: %d\n", (int)sizeof(container));
fwrite(container,1,sizeof(container),logfp);
fclose(logfp);
}
指针上的 sizeof() 也返回 8 而不是 char 的正确数量,所以这是另一个问题。除此之外,日志文件中充满了我猜测的指针指向的内存地址。我想将标记化的字符串写入 LOGFILE。我该怎么做?