gpt4 book ai didi

c - strtok - 如何避免换行并放入字符串数组?

转载 作者:行者123 更新时间:2023-12-04 06:33:01 27 4
gpt4 key购买 nike

如果我欺骗了主题,我真的很抱歉,我在这里搜索它没有结果。
我有代码

void split(char* str, char* splitstr)
{
char* p;
char splitbuf[32];
int i=0;
p = strtok(str,",");
while(p!= NULL)
{
printf("%s", p);
sprintf(&splitstr[i],"%s",p);
i++;
p = strtok (NULL, ",");

}
}

如何使用正确的 sprintf 将 strtok 拆分的单词放入字符串数组?
我能以某种方式避免由 strtok 创建的断线吗?
我正在用 ANSI C 编程。我以相同的方式声明了数组 splitstr 和 str 。
char* splitstr;//in main char splitstr[32];

感谢帮助。

编辑:

我想做这样的事情:
INPUT (它是一个字符串) > "aa,bbb,ccc,ddd"
我声明:char tab[33];
输出(如果可能,将所有项目保存到字符串数组)>
选项卡 [0] 是“aa”
选项卡 [1] 是“bbb”
...
tab[3] 是 "ddd"但不是 "ddd(newline)"


编辑2 [18:16]

我忘了添加数据字符串来自文件的读取行。这就是我写“ddd(newline)”的原因。之后我发现新行也由 strtok 显示,但作为另一个项目。顺便说一句,所有答案都很好地考虑了这个问题。几秒钟前我的笔记本电脑坏了(我不知道为什么屏幕变黑了) 一旦我控制了我的电脑,我就会检查代码。 :-)

最佳答案

试一试:

#include <stdlib.h>
#include <string.h>
...
void split(char *str, char **splitstr)
{
char *p;
int i=0;

p = strtok(str,",");
while(p!= NULL)
{
printf("%s", p);
splitsr[i] = malloc(strlen(p) + 1);
if (splitstr[i])
strcpy(splitstr[i], p);
i++;
p = strtok (NULL, ",");
}
}

然后,在 main :
#define MAX_LEN  ... // max allowed length of input string, including 0 terminator
#define MAX_STR ... // max allowed number of substrings in input string

int main(void)
{
char input[MAX_LEN];
char *strs[MAX_STR] = {NULL};
...
split(input, strs);
...
}

一些解释。
strsmain 中定义作为指向 char 的指针数组.每个数组元素将指向从输入字符串中提取的字符串。在 main 中,所有分配的都是指针数组,每个元素最初为 NULL;每个元素的内存将在 split 中分配函数使用 malloc ,基于子字符串的长度。在你完成 strs 之后的某个地方您需要使用 free 释放这些指针:
for (i = 0; i < MAX_STR; i++)
free(strs[i]);

现在,为什么是 splitstr声明为 char **而不是 char *[MAX_STR] ?除非它是 sizeof 的操作数或 &运算符,或者是用于在声明中初始化另一个数组的字符串文字,数组表达式的类型将隐式转换为 N-element array of Tpointer to T ,表达式的值将是数组中第一个元素的位置。

当我们调用 split :
split(input, strs);

数组表达式 input从类型 char [MAX_LENGTH] 隐式转换至 char * (T == char),以及数组表达式 strs从类型 char *[MAX_STRS] 隐式转换至 char ** (T == char *)。所以 splitstr接收两个参数的指针值,而不是数组值。

关于c - strtok - 如何避免换行并放入字符串数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5156119/

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