gpt4 book ai didi

c - 将字符串数组传递给函数并修改它会破坏它

转载 作者:太空宇宙 更新时间:2023-11-04 06:57:56 26 4
gpt4 key购买 nike

我目前正在用 C 编写一种小型编程语言。我从文件加载脚本,然后使用 strtok 对其进行标记化。问题是,虽然在分词器函数中输出很好,并给出了预期的结果,但是当函数返回到 main 时,数据已损坏,给我的输出如下:

╠ a

而不是预期的:

int

我在 C 方面没有太多经验,但我最好的猜测是这是一个 null 终止问题,尽管我读过 strtok 应该自动这样做。

相关代码如下:

int tokenize(char* script, char* tokens[]) {
char buffer[256];
strcpy(buffer, script);

char* token = strtok(buffer, " ");
int i = 0;
while (token) {
tokens[i] = token;
printf("token: %s\n", token);
token = strtok(NULL, " ");
i++;
}
printf("First token (tokenize): %s\n", tokens[0]);

return i;
}


int main(int argc, char* argv[]) {
// ....
char* script = read_script(argv[1]);

char* tokens[256];
int token_count = tokenize(script, tokens);
printf("First token (main): %s\n", tokens[0]);
// ...
}

这是控制台输出:

token: int
token: i
token: =
token: 0

First token (tokenize): int
First token (main): ╠ a

最佳答案

您正在返回指向局部变量中标记的指针:

int tokenize(char* script, char* tokens[]) {
char buffer[256];
...

buffer 一旦 tokenize() 返回就不再存在。

关于c - 将字符串数组传递给函数并修改它会破坏它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41786086/

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