krkrkrkrkr
310
2019-06-05 19:14:58 작성 2019-06-05 19:20:07 수정됨
5
690

C언어코딩 중 배열, 포인터 문제인데 arr[1]값이 고정이 안돼요


char *arr[100]={0};
char top_1m_File[100];
   FILE *pFile = NULL;
   pFile = fopen("/root/qt/1m_detect/top-100test.csv","r");
   if( pFile != NULL ){
       for(int i=0;;i++){
           fgets( top_1m_File, sizeof(top_1m_File), pFile );
           if(feof(pFile))break;
           arr[i]=top_1m_File;
           printf("arr[1] = %s",arr[1]);
           printf("arr[%d] = %s",i ,arr[i]);
       }
       fclose( pFile );
   }
   else{
       printf("Fileopen fail..");
   }​

여기서 arr값이 1부터 끝까지 다 같은 값이 들어가는데 어떻게 안같게 바꾸죠? ㅠㅠ도저히모르겠네요
csv 파일안에는
1.google.com
2.youtube.com 이런 문자열이 100개 있습니다!
0
  • 답변 5

  • krkrkrkrkr
    310
    2019-06-05 19:29:09 작성 2019-06-05 19:29:41 수정됨

    변수 선언 할 때 char *arr[100] = {0};이라고 했는데 *arr[i]공간에 문자열들어가는거니까 %s 해도 출력 잘되긴하는데 맞는거 아닌가요..?  그게 문제는 아닌 것 같구 그냥 계속 같은값이 들어가는걸 해결을 못하겠네요 ㅠㅠ

  • Ryu
    239
    2019-06-05 20:22:37

    공부좀하세요

  • 스캇
    33
    2019-06-05 20:27:15

    char *arr[100]={0}


    이건 포인터 배열입니다


    arr[i]=top_1m_File


    i번째 포인터에 top~의 주소를 넣고 있습니다

  • defult
    12k
    2019-06-05 23:18:45 작성 2019-06-05 23:34:48 수정됨

    char *arr[100]={0}; 이런식으로 선언하셨는데

    포인터배열은 나중에 몇개가 들어갈지 알수없는 배열에 자동으로 데이터를 확장시켜주는 동적 사이즈의 배열이 아닙니다.

    포인터배열로 선언해서 몇개가 들어갈지 알수 없는 값을 선언 초기화 끝난 다음부터 넣기 시작한 시점부터 이미 정상적인 동작한다고 보기힘듭니다.

     거기에 포인터 배열로 선언해놔서 사이즈도 제대로 정해지지않는데 {0}로 초기화 요구하는것도 문제됩니다.

    배열선언 = {0} 의 방식은 포인터없이 배열 선언사이즈를 절대값으로 이미 사이즈를 넣어서 선언시점에서 사이즈가 확정된 경우에한해 배열 전체를 0으로 초기화하는 방식입니다.

    포인터로 배열처럼 선언한경우에는 저런 명시적으로 넣는게아닌 반드시 초기값 직접 다 입력해서 자동적으로 사이즈가 알수도록하셔야합니다.


    동적으로 사이즈가 바뀌는 배열을 원하시면 무작정 포인터로 배열 선언해서 데이터를 막 넣어보고 동작이 이상한데라고 고민하지마시고 (원래 안되는거니) MALLOC를 따로 공부하세요



  • Ryu
    239
    2019-06-06 17:38:55

    포인터는 메모리위치

  • 로그인을 하시면 답변을 등록할 수 있습니다.