2013-12-19 48 views
-2

我的程序不起作用。 我的问题是如何正确定义我的函数原型? 另外,函数调用中是否有错误? 请帮帮我!如何正确定义我的函数原型?

这里是我的代码:

#include <stdio.h> 
#include <string.h> 
#include <ctype.h> 
void copystring(char m[][],char temp[]); 
int main() 
{ 
    char temp[10000]; 
    char m[10000][10000]; 
    gets(temp); 
    copystring(m,temp); 
    printf("%s\n",m[0]); 
    printf("%s\n",m[1]);    
    return 0; 
} 

void copystring(char m[][],char temp[]) 
{ 
    int i=0; 
    int j=0; 
    int k; 
    for (k=0;k<(strlen(temp));k++) 
    { 
     if (temp[k]!=',') 
     { 
      m[j][i++]=temp[k]; 
     } 
     else 
     { 
      m[j][i]='\0'; 
      j++; 
      i=0; 
     } 
    } 
} 
+4

我强烈地认为'char m [10000] [10000];'会引发堆栈溢出。 – alk

+0

这里有什么问题? – Chinna

+0

'void copystring(char m [] [10000],char temp []);'显示完整,但最左侧的例外 – BLUEPIXY

回答

2

最快的 “修复” 将做到这一点:

void copystring(char m[][10000],char temp[]); 

但是你的100MB阵列的提防!

1

假设C99或稍后更改copystring()的签名是:

void copystring(size_t n, char m[n][n],char temp[n]); 

,并调用它像这样:

copystring(10000, m, temp); 

不要使用

gets(temp) 

但使用

fgets(temp, 10000, stdin); 

后者照顾不溢出temp

+0

C中是否有可变长度数组? –

+0

@BitFiddlingCodeMonkey:是的,从C99开始就有。 – alk