gpt4 book ai didi

c - strtok() 的问题

转载 作者:行者123 更新时间:2023-11-30 20:10:11 25 4
gpt4 key购买 nike

我试图分割“tmp”中的字符串并将其放入指针数组“arr”中。我这样做是因为我打算在“arr”上使用“execv”,但我不能,因为“arr”末尾没有NULL。相反,它有“(null)”,当我打印它的内容时,我得到了段错误。 我如何正确设置“arr”以便它可以与 execv 一起使用?谢谢

#include<stdio.h>
#include<sys/wait.h>
#include<stdlib.h>
#include<string.h>

int main(){

char tmp[40] = "echo Hello World \n ";
char *arr[40];

char *token = strtok(tmp, " \n");
int index = 0;

while(token != NULL){
arr[index] = malloc(strlen(token) + 1);
arr[index] = token;

index = index + 1;
token = strtok(NULL, " \n");
}


for(int i = 0; i < 40; i++){
printf("%s \n", arr[i], arr[i]);
}


return 0;

}

最佳答案

这里有一个大问题:

arr[index] = malloc(strlen(token) + 1);
arr[index] = token;

您不复制字符串,而是覆盖指针。您应该使用 strcpy复制字符串:

strcpy(arr[index], token);

在这种情况下,可能不需要复制字符串,只需赋值即可。这也意味着不需要分配。

<小时/>

您的代码还存在另一个问题:在 arr 中打印字符串的循环。

对于您拥有的字符串,arr 中应该只有三个有效元素,其余元素将未初始化且不确定。取消引用它们(就像您尝试打印它们指向的“字符串”时所做的那样)将导致 undefined behavior .

在上一个循环之后,您初始化了 arr,然后 index 将是 arr 中有效元素的数量。使用它作为打印循环的结尾:

for(int i = 0; i < index; i++){ ... }

关于c - strtok() 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47252788/

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