2013-02-15 4 views
0

메신저는 사용자 입력 문자열을 배열에 저장하는 프로그램을 작성합니다. 그런 다음 배열을 두 번째 요소를 인쇄하는 함수로 전달합니다. 그러나 나는 함수가 실행될 때마다 프로그램이 충돌한다는 것을 알고있다. 아래배열에 저장된 문자열을 인쇄하는 함수를 작성합니다.

내 샘플 코드 :

main() 
{ 
int num, count; 
char strStorage[10][10]; 

printf("\nEnter how many strings: "); 
scanf("%d" , &num); 
fflush(stdin); 

for (count = 0 ; count < num ; count++) 
{ 
    printf("Enter a string: "); 
    gets(strStorage[count]); 
    fflush(stdin); 
} 

//This works 
printf("%s", strStorage[2]); 

printMyArray(strStorage); 
} 

void printMyArray(char *myArray[ ]) 
{ 
    //This doesnt work 
    printf("%s", myArray[2]); 

} 

임 배열이 함수에 전달되는 방법을 배우기 위해이 일을. 아무도 이걸 도와 줄 수 있다면 고맙겠습니다.

감사

+0

오류 메시지가 표시됩니까? 어떤 환경을 사용하고 있습니까? GCC, Visual Studio? 또한 고정 크기 배열을 사용하고 있다고 생각하십시오. 9 자 이상을 입력하면 ('\ 0'의 후행을 잊지 마세요. 배열 내부의 경계를 덮어 씁니다). C에서는 배열을 전달하지 않고 변수의 포인터 또는 주소를 실제로 전달합니다. –

+0

Note : 입력 스트림으로'stdin'을 지정하는'gets' 대신에'fgets'을 사용해서는 안됩니다. – JBL

+0

프로그램이 충돌하여 Windows 오류보고 문제가 발생합니다. – kype

답변

0

문제는 당신이 정말로 포인터의 배열로 이중 배열로 이중 배열을 전달하고,하지 말아야한다는 것입니다.

void printMyArray(char *myArray[ ]) 

당신은 당신의 코드 몇 가지 문제가

void printMyArray(char myArray[][10]) 
+0

시도해 보았지만 제대로 작동하지 않았습니다. 내가 아는 한 전화 할 때 printMyArray (strStorage); 전달되는 것은 전체 배열이 아닌 주소입니다. 그래서 실제로 전달되는 것은 배열이 아니라 주소이기 때문에 인수 (또는 매개 변수)를 포인터로 저장해야합니다. 내가 잘못되었을 수도 있습니다 – kype

0

된다 :

A) 당신은 10 문자열을 따로 공간 설정을하지만, 사용자가 당신에게 입력 10 개 이상을 선택할 수 있습니다 그들을 막을 아무 것도하지 마십시오.

B) 사용자는 최대 9 자의 문자열을 입력 할 수 있습니다. char* [] 말하는 것 같이 다른 답변

C)는 char [][10]

+0

예 10 문자열은 단지 일시적으로 기능을 테스트하기위한 것입니다. 배열이 올바르게 전달되기를 바랬습니다. 감사합니다. – kype

0

char *myArray[ ]와 동일하지 포인터 배열을 선언한다. 따라서 각 요소는 이중 포인터입니다.

는 여기

printf("%s", *myArray[2]); 

데 필요한 요소를 액세스하려면 *myArray[2]*(*(myArray + 2)) 등가이고 제 포인터들의 어레이에 대한 포인터, 그리고 행 *(myArray + 2) 점 다른 *의 값이 그 포인터가 가리키는 액세스 추가 .

+0

이전에 시도했지만 작동하지 않았습니다. 문제는 어레이가 지나가는 것입니다. 입력 해 주셔서 감사합니다. – kype

관련 문제