我試圖寫我自己的split
功能像perl
和awk
使用strtok_r
功能在C
它創建陣列,以及在數組元素的收益多少,我試過的東西,但我沒有正確理解動態內存分配的概念,請別人糾正我,也請注意。下使用strtok_r分割功能創建 - 如Perl和awk
我相信strdup
照顧內存分配我是對嗎?
錯誤:段錯誤(核心轉儲)
這也是迄今爲止
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int split(char * str, char **fields, const char *sep)
{
char *copy = strdup(str), *tmp, *word;
int count=0;
word = strtok_r(copy, sep, &tmp);
while(word)
{
word=strtok_r(NULL, sep, &tmp);
fields[count] = strdup(word);
count++;
}
return count;
}
int main()
{
char string[80]="a,b,c,d,e,f,g,h,i,j,k,l";
const char *sep = ",";
char **cols; int i;
cols = malloc(strlen(string)+1*sizeof(char *));
printf("%s\n",string);
int n = split(string,cols,sep);
printf("%s\t%d\n",string,n);
for(i=0; i<n; i++)printf("%s\t%s\n",string,cols[i]);
free(cols);
return 0;
}
感謝我試圖提前爲所有的志願者
'cols'沒有被分配,它沒有指向任何有效的內存。解引用它是未定義的行爲。 – 2014-10-20 11:53:20
@TheParamagneticCroissant:是否這'cols = malloc(strlen(string)+ 1 * sizeof(char *));'是正確的先生? – user3637224 2014-10-20 12:19:26
@userXXX不,它不是。 – 2014-10-20 12:59:55