C语言函数中字符串数组的传递
估计有不少朋友和我一样对函数中字符串数组的传递十分疑惑吧。现将我的一点新的写下来与大家分享下,也希望大家能够对代码进行讨论,看看有无错误,能否进一步简化,或是有更好的解决方案。程序代码:
void DebugStringArrayVar(int lineNumber,char varName[],char * value[],int rows,int cols) { char * newContent; char * oldContent; asprintf(&newContent,"Line %d :\n",lineNumber); oldContent=newContent; asprintf(&newContent,"%s%s :\n",oldContent,varName); free(oldContent); oldContent=newContent; int i,j; for(i=0;i<rows;i++) { for(j=0;j<cols;j++) { asprintf(&newContent,"%s\t%s",oldContent,value[i*cols+j]); free(oldContent); oldContent=newContent; } asprintf(&newContent,"%s\n",oldContent); free(oldContent); oldContent=newContent; } AttachToFile(DEBUG_FILE_PATH,oldContent); free(oldContent); return; }
程序代码:
int main(void) { DebugStart("test.c","main"); char * str1="a"; char * str2="bb"; char * str3="ccc"; char * str4="dddd"; char * str5="eeeee"; char * str6="ffffff"; char * stringArray[2][3]={{str1,str2,str3},{str4,str5,str6}}; DebugStringArrayVar(12,"stringArray",&stringArray[0][0],2,3); DebugEnd("test.c","main"); return 0; }
代码是从项目中直接复制过来的。DebugStringArrayVar()函数是关键的函数,对其他的函数,大家可以直接忽略掉。
说明:
1、首先创建一个数组,这个数组中元素指向字符串的地址(字符串第一个字符的地址)
2、通过函数将这个数组的首元素地址传递过去,同时传递数组的维度,这样就可以遍历数组了。
3、在函数中,通过value[i*cols+j]找到目标字符串的地址。