gpt4 book ai didi

c - 分段故障?字符串标记化

转载 作者:行者123 更新时间:2023-12-02 08:33:22 25 4
gpt4 key购买 nike

我正在尝试编写一个函数,将字符从数组转换为整数,以便我可以为每个组生成总和或其他数学过程。我知道首先我必须使用 strtok 来去掉空格和“+”。我一直在尝试至少首先让 strtok 开始工作,但是当我尝试运行它时它一直说段错误。

有什么帮助吗?

#include <string.h>
#include <stdio.h>
int main(void)
{
char* string[] = { "10 + 20", "1 + 3 + 6 + 8" };
sum(string[0]);
}

int sum(char* s)
{
char *stringcopy = malloc( strlen(s) + 1 );
char* del = " +";
char* token;
int i;

stringcopy = s; /* 'copy' problem here */

token = strtok(stringcopy, del);
while( token ) {
printf("%s\n", token);
token = strtok(NULL, del);
}
return 11; /* placeholder until I get the sum */
}

最佳答案

strtok 给你一个段错误的原因很简单:

你正在一个字符串文字上运行它,尽管它的类型是 char[n] 是一个不可变的对象。
strtok 修改您运行它的任何字符串!

解决方法很简单:在副本上运行。这里有一个复制字符串的函数(大多数 C 库都提供这个非标准函数作为 char* strdup(const char*):

char* my_strdup(const char* s) {
size_t size = strlen(s)+1;
char* ret = malloc(size);
if(ret)
memcpy(ret, s, size);
return ret;
}

不要忘记稍后free() 副本。

您尝试这样做,但是在有了一个良好的开端并使用 malloc 为字符串保留空间之后,您只是通过将指向文字的指针分配给相同的字符串来丢弃它(内存泄漏)指针。

关于c - 分段故障?字符串标记化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24480411/

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