gpt4 book ai didi

c - C strtok() 中的字符串拆分

转载 作者:行者123 更新时间:2023-11-30 18:55:36 28 4
gpt4 key购买 nike

我想分割从终端输入接收到的字符串(如果它们包含在缓冲区中)。如果是的话我想打印它们。

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

char* fich[5]={"ha","he","hi","ho","hu"};

int main(){

char passaarg[70];
const char space[2]= " ";
char *token;
int i;

while(1){

read(STDIN_FILENO, passaarg, 70);
for (i = 0; i < 5; i++){
if(strncmp(passaarg, fich[i], 2) == 0){
token = strtok(passaarg, space);
while(token != NULL){
printf("%s\n", token);
token = strtok(NULL, space);
printf("%s\n", token);
}
break;
}
}
}
return 0;
}

我的输出如下:

ha he
ha
he

he

Segmentation fault (core dumped)

最佳答案

我怀疑您的问题出在这里:

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

strtok 返回 NULL 时,第二个 printf 将导致未定义的行为(可能是崩溃),就像没有更多 token 时一样在字符串中。只需删除该行即可。

从风格上来说,我会在这里使用 for 循环:

for(token = strtok(passaarg, space); token != NULL; token = strtok(NULL, space)) {
printf("%s\n", token);
}

关于c - C strtok() 中的字符串拆分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27319083/

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