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

이 charm [10000] [10000];은 스택 오버플로를 유발할 것이라고 강력하게 가정합니다. – alk

+0

여기에 무슨 문제가 있습니까? – Chinna

+0

'void copystring (char m [] [10000], char temp []);'가장 왼쪽의 것을 제외한 전체 표시 – BLUEPIXY

답변

2

가장 빠른이 "수정"이 작업을 수행하는 것입니다 :

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

을하지만 당신의 메가 바이트 배열 조심!

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

을하고 그래서 같이 호출 : : 나중에 C99 또는 가정

1

copystring()의 서명을 변경

copystring(10000, m, temp); 

gets(temp) 

하지만 사용을 사용하지 마십시오

fgets(temp, 10000, stdin); 

후자는 넘쳐 흐르지 않고 temp을 처리합니다.

+0

C에 가변 길이 배열이 있습니까? –

+0

@BitFiddlingCodeMonkey : 예, C99에서 있습니다. – alk

관련 문제