【发布时间】:2016-09-06 21:07:46
【问题描述】:
我正在尝试创建一个将 cstring 拆分为单词数组的函数。例如。如果我发送“Hello world”,那么我会得到一个包含两个地方的数组,其中第一个地方有元素“Hello”,第二个地方有元素“world”。我遇到了分段错误,我一生都无法弄清楚似乎出了什么问题。
在 for 循环中,我检查有多少空格,这决定了总共有多少单词(间距始终为 N-1,N = 单词数)。然后我告诉程序给计数器加 1(因为 N-1)。
我声明了一个 char* 数组 [],以便将每个单词分开,不确定我是否需要 counter+1(因为 \0?)
这就是棘手的部分。我使用 strtok 来分隔每个单词(使用“”)。然后我 malloc char*array[] 的每个位置,以便它有足够的内存来存储单词。直到没有更多的词可以输入为止。
如果有人能提示我是哪个部分导致了分段错误,我将不胜感激!
void split(char* s){
int counter = 0;
int pos = 0;
for(int i=0; s[i]!='\0'; i++){
if(s[i] == ' '){
counter ++;
}
}
counter += 1;
char* array[counter+1];
char *token = strtok(s, " ");
while(token != NULL){
array[pos] = malloc(strlen(token));
strcpy(array[pos], token);
token = strtok(NULL, " ");
pos++;
}
【问题讨论】:
-
malloc(strlen(token))-->malloc(strlen(token)+1) -
为了找到失败的地方,a) 在调试器下运行,b) 使用 valgrind(如果使用 linux)
-
c) 像理智的人一样添加打印语句