gpt4 book ai didi

c - 如何在 C 的二维字符数组中填充字符串?

转载 作者:太空宇宙 更新时间:2023-11-04 01:00:30 24 4
gpt4 key购买 nike

尝试实现strtok

#include <stdio.h>

char* my_strtok (char* arg_string, const char* arg_delimeter)
{
char** after_tokenization = (char**) malloc (sizeof(char) * 1000);
char* hold_chars_of_one_group = (char*) malloc (sizeof(char) * strlen(arg_string));

int j = 0;
int i = 0;
int k = 0;

while (arg_string[i])
{
if (arg_string[i] != *arg_delimeter)
{
hold_chars_of_one_group[k] = arg_string[i];
k++;
}
else
{
after_tokenization[j][0] = hold_chars_of_one_group;

j++;
k = 0;
}
i++;
}

return after_tokenization;
}


int main(void)
{
char*p = my_strtok ("qwerty,asdf,shizuka,sharma", ",");
return 0;
}

通过输入 printfs,我可以看到段错误在这一行:

after_tokenization[j][0] = hold_chars_of_one_group;

崩溃前j的值显示为2,两个数组都分配了足够的内存,那么C的2D char数组如何入栈呢?

为什么我在那里遇到段错误?出路在哪里?

最佳答案

after_tokenization[j][0] = hold_chars_of_one_group;

即使您为 after_tokenization 分配了足够的内存。 after_tokenization[j] 处的指针 未初始化。它包含一个未指定的地址。因此,当您通过应用下标运算符 [0] 取消引用它时,这是不安全的行为。

这很可能是您崩溃的原因。

关于c - 如何在 C 的二维字符数组中填充字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41788053/

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