2013-12-19 2 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 []);' Show full, за исключением самых левых – 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

Смежные вопросы