gpt4 book ai didi

c - 访问 strtok 指针时出现段错误

转载 作者:太空宇宙 更新时间:2023-11-04 03:51:52 25 4
gpt4 key购买 nike

我正在尝试使用 strtok 将字符串拆分为单词。现在发生了一个奇怪的行为:

当使用 Xcode 和 LLVM 编译时,程序可以正常工作。

但是用gcc编译会导致访问strtok创建的指针时出错

代码如下:

char *toTest ="Dieser String hat Groß und Kleinschreibung!";
char* shouldResults[]={"dieser","string","hat","groß","und","kleinschreibung"};
char* tokens = getTokenWords(toTest);
int i = 0;
int error = 0;
while (tokens != NULL){
char * toTest = shouldResults[i];
if(strcmp(tokens,toTest) != 0){
error = 1;
break;
}
tokens = strtok (NULL, " ,.-");
i++;
}
return error;

getWordTokens 函数在另一个模块中声明,如下所示:auth.c:

char* getTokenWords(char *text){
char *str = strdup(text);
int i;
for(i = 0; str[i]; i++){
str[i] = tolower(str[i]);
}
char *pch;
pch = strtok (str," ,.-");
return pch;
}

标题看起来像这样:授权.h

#ifndef _AUTH_H
#define _AUTH_H
//creates tokens out of words from string
char* getTokenWords(char *text);

#endif

我通过添加导入 auth.h:

#include "auth.h"

在主模块中。

你能帮我解决这个错误吗?

最佳答案

函数 strtok 修改您传递给它的字符串。您将指针 toTest 传递给它,它指向一个字符串文字 - 而不是一个字符数组。我的猜测是 XCode 和 LLVM 将 toTest 指向的字符串文字存储在可写内存中,而 gcc 将它放在只读内存中。我可能错了,但我会尝试将 toTest 声明为数组。

char toTest[] ="Dieser String hat Groß und Kleinschreibung!";

关于c - 访问 strtok 指针时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20077978/

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