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]找到目标字符串的地址。



