C分裂字符串

时间:2016-02-26 18:41:02

标签: c string split strtok string-literals

#include "stdio.h"
#include "string.h"
#include "stdlib.h"

char *strArray[40];

void parsing(char *string){
  int i = 0;
  char *token = strtok(string, " ");
  while(token != NULL)
  {
    strcpy(strArray[i], token);
    printf("[%s]\n", token);
    token = strtok(NULL, " ");
    i++;
  }
}

int main(int argc, char const *argv[]) {
char *command = "This is my best day ever";
parsing(command); //SPLIT WITH " " put them in an array - etc array[0] = This , array[3] = best

return 0;
}

这是我的代码,有没有简单的方法来解决它?顺便说一句,我的代码不起作用。我是编码C语言的新手,我不知道如何处理它:(帮助

3 个答案:

答案 0 :(得分:2)

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

char *strArray[40];

void parsing(const char *string){//Original does not change
    int i = 0;
    strArray[i++] = strdup(string);//make copy to strArray[0]

    char *token = strtok(*strArray, " ");
    while(token != NULL && i < 40 - 1){
        strArray[i++] = token;
        //printf("[%s]\n", token);
        token = strtok(NULL, " ");
    }
    strArray[i] = NULL;//Sentinel

}

int main(void){
    char *command = "This is my best day ever";
    parsing(command);

    int i = 1;
    while(strArray[i]){
        printf("%s\n", strArray[i++]);
    }
    free(strArray[0]);
    return 0;
}
int parsing(char *string){//can be changed
    int i = 0;

    char *token = strtok(string, " ");
    while(token != NULL && i < 40){
        strArray[i] = malloc(strlen(token)+1);//Ensure a memory for storing
        strcpy(strArray[i], token);
        token = strtok(NULL, " ");
        i++;
    }
    return i;//return number of elements
}

int main(void){
    char command[] = "This is my best day ever";
    int n = parsing(command);

    for(int i = 0; i < n; ++i){
        printf("%s\n", strArray[i]);
        free(strArray[i]);
    }
    return 0;
}

答案 1 :(得分:1)

strtok()实际修改了提供的参数,因此您无法传递字符串文字并希望它能够正常工作。

您需要有一个可修改的参数才能使其正常工作。

根据man page

  

使用这些功能时要小心。如果您确实使用它们,请注意:

     
      
  • 这些函数修改了他们的第一个参数。

  •   
  • 这些函数不能用于常量字符串。

  •   

FWIW,任何修改字符串文字的尝试都会调用undefined behavior

答案 2 :(得分:0)

我已经完成了你的帮助,谢谢大家:)

我的拆分库= https://goo.gl/27Ex6O

代码不是动态的,如果你输入100位输入,它会崩溃我猜

我们可以使用带有以下参数的库:

解析(outputfile,inputfile,splitcharacter)

感谢