任何人都可以啓發我爲什麼此代碼不工作?通過引用返回的C式字符串
- 我通過
char *
指向我的分割函數並分割我的緩衝區。 - 在堆上爲每個傳入的arg(char *)分配內存,然後在此新緩衝區中執行strcpy子串。
- 它一切正常,直到我從方法返回並嘗試打印任何變量。
- 分割失敗
void split(char * buffer, int num, ...)
{
char* string;
char* tofree;
string = strdup(trim(buffer));
if (string != NULL) {
tofree = string;
va_list arguments;
//Initializing arguments to store all values after num
va_start (arguments, num);
int i = 0;
for (i = 0; i < num; i++)
{
//Item is the final store place of the split substring
char * arg = va_arg (arguments, char *);
//Split the strings, delimiter is space
char * splitBuffer = strsep(&string, " ");
//Allocate the buffer memory to store the splitBuffer
arg = malloc(sizeof(char*)*strlen(splitBuffer));
strcpy(arg ,splitBuffer);
printf("Buffer [%s] -- [%s]n", buffer, arg);
}
va_end (arguments); // Cleans up the list
free(tofree);
}
}
char * a;
char * b;
char * c;
split(buffer,3,a,b,c);
printf("Print A = %s B = %s C = %s\n", a,b,c);
你可能需要在發送指向a,b和c的指針,然後在循環中進行賦值時使用deref。目前,它正在改變你的本地指針(副本),而不是實際的指針。 – tjameson 2013-03-11 15:29:08
請重新縮進代碼,將製表符轉換爲空格......每當將代碼粘貼到SO時,請確保它不包含製表符,因爲這些製作混亂。 – hyde 2013-03-11 15:30:53
但(a,b,c)都是char *,所以它們已經是指針了?雖然你的權利,它做一些複製一些地方,因此外部的功能從未改變。 – 2013-03-11 15:32:56