gpt4 book ai didi

c - 段错误 : Using strtok, 系统调用。 C语言编程

转载 作者:行者123 更新时间:2023-11-30 14:42:14 24 4
gpt4 key购买 nike

我目前正在尝试 strtok 两次,以便标记文件传递的所有命令。第一轮标记化有效,但随后出现段错误。它可能是什么?我尝试缩小所有数组,因为我认为这是内存问题。这也是用 C 语言编写的,我没有收到任何错误或警告。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <assert.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <errno.h>
#include <string.h>

int main(int argc, char *argv[])
{
char content[100];
int fd;
ssize_t bytes = 0;
fd = open(argv[1], O_RDONLY);
int i = 0;

char* token;
const char a[2] = "\n";
const char b[2] = " ";
char storage[20][20];
char temp[20][20];
bytes = read(fd, content, sizeof(content)-1);
close(fd);

if(fd < 0)
{
write(1, "File doesn't exist\n", 19);
return 1;
}


token = strtok(content, a);
strcpy(storage[0],token);
printf("%s\n",storage[0]);

while(token != NULL)
{
i++;
token = strtok(NULL, a);
strcpy(storage[i],token);
printf("%s\n",storage[i]);
}

token = strtok(storage[0],b);
strcpy(temp[0], token);
printf("%s\n",temp[0]);
i = 0;

while(token != NULL)
{
i++;
token = strtok(NULL, b);
strcpy(temp[i],token);
printf("%s\n",temp[i]);

}





return 0;

}

这是我得到的输出:

/bin/ls -l 
/bin/cat command.txt
/usr/bin/wc -l -w command.txt
??
Segmentation fault

最佳答案

    strcpy(storage[0],token);
printf("%s\n",storage[0]);

同样的事情你做了四五次。您需要检查token是否不为NULL。否则你的程序只是 UB

if( token)
{
strcpy(storage[0],token);
printf("%s\n",storage[0]);
}
else
{
/* do something if token is NULL */
}

您还可以重新组织循环(以第一个循环为例):

    token = strtok(content, a);
i = 0;

while(token != NULL)
{
strcpy(storage[i],token);
printf("%s\n",storage[i++]);
token = strtok(NULL, a);
}

关于c - 段错误 : Using strtok, 系统调用。 C语言编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54491248/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com