gpt4 book ai didi

c - 标记字符串错误

转载 作者:行者123 更新时间:2023-11-30 15:31:51 26 4
gpt4 key购买 nike

我试图标记一些字符串,以便数字本身就是标记,这样我最终可以添加它们,但我的标记化不起作用,我不确定为什么。它编译正确,但当我执行文件时,它显示“段错误”,有人知道为什么或如何获取数字作为标记吗?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int stringSum(char *s);
/*void minMaxValues(char *s, int *min, int *max);*/

int main(void)
{
int value,i;
char* text[] = { "1 + 2 + 3 + 4",
"7",
"30 + 20 + 10",
"9 + 900 + 90000 + 9000 + 90" };
for(i=0;i<4;i++) /*send strings to function*/
stringSum(text[i]);
}

int stringSum(char *s)
{
char* del = " + ";
char* token;
token = strtok(s,del);
while(token != NULL)
{
printf("%s\n",token);
token = strtok(NULL, del);
}
}

最佳答案

strtok 需要可修改的字符串。您在 main 中定义了不可修改的字符串文字数组,因此它们无法与 strtok 一起使用。

要快速解决问题,请使用:

char* temp = malloc(strlen(s) + 1);
strcpy(temp, s);
token = strtok(temp,del);

这会动态分配一个与 s 具有相同值的可修改字符串,您可以在 strtok 中使用该字符串。

由于这是动态分配的变量,请记住在方法结束时释放内存:

free(temp);
<小时/>

修改后的 stringSum 方法现在应如下所示:

int stringSum(char *s)
{
char* del = " + ";
char* token;

char* temp = malloc(strlen(s) + 1);
strcpy(temp, s);
token = strtok(temp,del);

while(token != NULL)
{
printf("%s\n",token);
token = strtok(NULL, del);
}

free(temp);
return 0; //or whatever it is that you want to return
}

关于c - 标记字符串错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24518813/

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