#include
int stringcut(char str, char dest[][50],int num,int lines)
/如果這裡不加上50會出錯*/
{
char *temp=str;
int k=0;
if(strlen(str) ==NULL)
{
return -1;
}
for(k=0;k<lines;k++)
{
strncpy(dest[k],temp,num);
temp=temp+num;
}
return 0;
}
main()
{
char str[]="abcdefghijklmnopqrstuvwxyz";
char dest[3][50];
int ret;
memset(dest,0,150);
ret=stringcut(str,dest,5,3);
if(ret!=0)
{
printf("failse\n");
}
printf("[%s]\n",dest[0]);
printf("[%s]\n",dest[1]);
printf("[%s]\n",dest[2]);
}
請問寫一個函數為二維數組賦值的時候,二維數組作為參數,應該怎麼寫,為什麼?上面注釋的地方為什麼去掉50的時候就報錯?
不知道為什麼參數不能寫成char **dest,如果這樣,程序會崩潰!
當你用 一維數組 作為參數時,參數要這麼寫:
char str[]或者char* str
也就是參數必須是 一維數組的首元素指針 。
同樣,當你用 二維數組 作為參數時,參數要這麼寫:
char str[][N]或者char* str[N]
這裡參數同樣必須是 二維數組的首元素指針 ,但是對於二維數組來說,他的首元素就是 一維數組的指針 ,而 一維數組的指針 這個類型寫法就是char* str[N],當去掉[N]後char* str表示的只是 單個元素的指針 ,所以必須有N,不能缺少。
所以做以下總結:
當用一個 N維數組 作為參數,其寫法就是
char str[][N2][N3]...[Nn-1][Nn]或者char* str[N2][N3]...[Nn-1][Nn]
也就是說N維數組當參數,就必須寫他的首元素的指針,但是 N維數組的首元素是N-1維數組 ,故必須按照我剛才說的寫。