2016-02-26 138 views
1
#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语言,我不知道我该怎么处理它:(帮助C分割字符串

回答

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; 
} 
+0

感谢您的关注,当我试图达到这个阵列,它说NULL的第二个对象。例如,当我输入printf(%s,strArray [1])时,它返回null。为什么会发生? – Berkin

+0

@Berkin细节未知。 请注明可以复制的具体示例。 – BLUEPIXY

+0

@Berkin [DEMO for(2)](http://ideone.com/WciHB7) – BLUEPIXY

1

strtok()实际修改提供的参数,因此你不能传递一个字符串,并期望它的工作。

你需要有一个修改参数来得到这个工作

由于每man page

使用这些功能时一定要谨慎,如果你使用它们,请注意:。

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

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

FWIW,任何试图修改字符串字面所调用undefined behavior

0

我和你的帮助做到了,谢谢大家:)

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

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

我们可以使用这些参数库:

解析(OUTPUTFILE,inputfile中,splitcharacter)

THANKS