2016-10-30 3 views
2

값 :
1을 main.c를
2 testarray.c
3. header.h가오류가 나는 3 개 개의 파일 가지고

내가 전역 변수 이름을 만들려면 'arrayTwoD'는 2 차원 배열입니다. 'testarray.c'에서 배열을 초기화하고 's'값을 채 웁니다. 이 함수는 'main.c'에서 호출됩니다.

headerfile.h

#include <stdio.h> 

void iniTwoDArray(); 

/*global variable 2d array not sure im doing correctly or not*/ 
extern char *arrayTwoD[2][3]; 


testarray.c 디버깅하는 동안, testarray.c에서

#include "headerfile.h" 
#include <stdio.h> 

char *arrayTwoD[2][3]; 

void iniTwoDArray() { 
    /*not sure if this is a good way to set the values */ 
    memset(arrayTwoD, 's', sizeof(arrayTwoD[0][0]) * 2 * 3); 
    for (int i = 0; i < 2; i++) { 
     for (int j = 0; j < 3; j++) { 
      printf("%c", arrayTwoD[i][j]); 
     } 
     printf("\n"); 
    } 
} 


main.c를

#include "headerfile.h" 

int main() { 
    iniTwoDArray(); 
    return 0; 
} 

: 여기

내 코드입니다 , th 아래 줄은 실행 후 "문자열의 읽는 중 오류가 발생했습니다"라는 내용을 계속 표시합니다. 오류는 아래 스크린 샷에 표시됩니다. 나는 방금 C를 배우기 시작했는데, 당신이 내게 평신도 용어로 설명 할 수 있다면 정말로 감사 할 것입니다.

memset(arrayTwoD, 's', sizeof(arrayTwoD[0][0]) * 2 * 3); 

enter image description here

+1

가'문자의 arrayTwoD해야하는데 memset 함수 (arrayTwoD, '의'는 sizeof (arrayTwoD))를 할 수있는 [2] [3]'? 'char * array ... '가 아니다. –

+2

'char * arrayTwoD [2] [3];'은'char'에 대한 * 포인터 *의 2D 배열이다. '*'를 생략하면'char'의 2D 배열이됩니다. –

+1

'char * arrayTwoD [2] [3];'는 char 배열이 아니며,'char'가 아니라'char'에 대한 포인터입니다. 별을 생각해. – alk

답변

0

그것은 도움이 \ 영리하려고 디버거 - 그것은 문자의 배열을보고하고 문자열입니다 가정입니다. 자동 창을 보는 대신 시계를 사용하면 변수를 더 잘 \ 올바르게 해독 할 수 있습니다.

는 참고 : 당신은 단지

+0

고마워! 내가 직면 한 또 다른 문제를 해결합니다. sizeof (arrayTwoD [0] [0]) * 2 -1 * 3 -1 어떻게 든 정수 빼기가 불가능합니다. 왜 그런지 알아? 둘째로, 배열에 시계를 추가하려고했습니다. 여전히 오류를 보여줍니다. – ysj

+0

* 문자 배열을보고 있고 문자열이라고 가정합니다. * "문자 배열"과 "텍스트 문자열"사이에는 차이가 없으며 컴파일러는 상관하지 않습니다. Asker가 초기화되지 않은 포인터를 사용하고 있는데 충돌이 발생했습니다 ... –

관련 문제