2013-01-23 2 views
0

메신저 꽤 새로운 C, 그리고 파일의 넓은 배열 변수를 함수의 결과로 채우려 고 메신저 간단한 코드 샘플 heres 내 말은, 사람이 방향으로 나를 가리킬 수 있습니다 heres 이게 왜 효과가없는거야?캔트 파일 변수에 값을 할당

#include <sys/types.h> 
#include <dirent.h> 
#include <regex.h> 
#include <stdio.h> 
#include <gtk/gtk.h> 
#include <string.h> 
#include <unistd.h> 
#include <pwd.h> 

static gchar *external_names; 

void directories(int arraylength, gchar internal_names[][100]){ 
    int n; 
    for (n = 0; n < arraylength; n++) 
    { 
     strcpy(external_names[n], internal_names[n]); 
    } 
    for (n = 0; n < arraylength; n++) 
    { 
     printf("%s internal with %s external\n",internal_names[n], external_names[n]); 
    } 
} 

void main() 
{ 
    gchar anotherarray[10][100]; 
    directories(10, anotherarray); 
} 

[편집] 최신 코드

#include <sys/types.h> 
#include <dirent.h> 
#include <regex.h> 
#include <stdio.h> 
#include <gtk/gtk.h> 
#include <string.h> 
#include <unistd.h> 
#include <pwd.h> 

static gchar *external_names[100]; 

void directories(int arraylength, gchar internal_names[][100]){ 
    int n = 0; 
    //gchar external_names[arraylength][100]; 
    for (n = 0; n < arraylength; n++) 
    { 
     printf("%s %i\n","before", n); 
     strcpy(external_names[n], internal_names[n]); 
     printf("%s %i\n","after", n); 
    } 
} 

void main() 
{ 
    int n; 
    gchar anotherarray[10][100]; 
    for (n = 0; n < 10; n++) 
    { 
     strcpy(anotherarray[n],"test"); 
    } 
    directories(10, anotherarray); 
    for (n = 0; n < 10; n++) 
    { 
     printf("%s internal with %s external\n",anotherarray[n], external_names[n]); 
    } 
} 
+0

포인터를 통해 메모리의 불확정 주소에 쓰고 있습니다. 파일이 아닙니다. ['fopen()'] (http://en.cppreference.com/w/c/io/fopen), ['fprintf()'] (http : //)로 시작하는 C 런타임 라이브러리 FILE apis 형식을 사용하십시오. /en.cppreference.com/w/c/io/fprintf), ['fwrite()'] (http://en.cppreference.com/w/c/io/fwrite) 등이 있습니다. 네가 시작 했어. – WhozCraig

+0

변수 값을 지정할 때까지 변수 값을 사용할 수 없습니다. 어떤 값을 할당하기 전에'external_names' (이 코드에서는'strcpy (external_names [n], internal_names [n]);')를 사용합니다. –

+0

내부 배열의 값을 지정하지 않고 'strcpy (external_names [n], internal_names [n]);) 파일에 파일을 쓰지 않으려 고합니다. – Mike

답변

2
static gchar *external_names; //one dimensional array. 

external_names은 한 차원 배열이고 당신은 2 차원 배열에서 internal_names를 할당하려고합니다.

strcpy(external_names[n], internal_names[n]); 

인덱스를 증가시킬 때 발생합니다.

&internal_names[1] = &internal_names[0] + size_t*100 
&external_names[1] = &external_names[0] + size_t*1 

이 문제를 해결하려면 ,

static gchar (*external_names)[100]; 

작동합니다.

+0

아아아, 그래서 그것을 정적 gchar * external_names [];로 선언하고 싶습니다. 나는 짐작한다? – Mike

+0

에 'static gchar * external_names [100];이 (가) 있습니다. strcpy에서 코드 segfaults (external_names [n], internal_names [n]); 초기화되지 않은 외부 배열로 인해,하지만 내가 블록 안의 그것을 초기화하는 경우, 그 값을 얻는 것, 필자는 원래의 게시물에 업데이트 된 코드를 추가하여 무엇을 의미하는지 보여줍니다. – Mike

+1

@ 마이크 허용 된 답변에서 약간의 대답을 얻어야합니다 이 질문의 http://stackoverflow.com/questions/3901962/strcpy-and-arrays-of-strings –

1

이 :

static gchar *external_names; 

단지 하나의 문자 포인터, 당신의 anotherarray 같은 문자열 배열이 아니다.

호출에서 색인을 생성 할 때 첫 번째 인수는 char이고 strcpy()은 두 개의 포인터를 필요로하기 때문에 잘못되었습니다.

관련 문제