#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语言的新手,我不知道如何处理它:(帮助
答案 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)
感谢