2012-10-01 2 views
0

그래서 내가 왜이 작업을 수행 할 수 없는지 궁금합니다.C 포인터 및 배열 호환되지 않는 형식

int main(int argc, char **argv){ 

    FILE *src; 
    char filePath[261]; 
    filePath = argv[1]; 

마지막 줄에는 컴파일러 오류가 있습니다. char []와 char *의 차이점은 무엇입니까? argv [1]와 같은 filePath를 설정할 수 있도록이 코드를 어떻게 수정해야할까요? 미리 감사드립니다.

+0

배열은 할당 할 수 없으며 포인터도 아닙니다. –

+0

이것은 두 가지의 차이점입니다. http://stackoverflow.com/questions/12676402/why-cant-i-treat-an-array-like-a-pointer-in-c/12676404#12676404 – Mike

답변

5

사용

strcpy(filePath, argv[1]); 

행복 살고 있습니다. argv [1]이 NULL인지 확인하고 argc가> 1인지 확인하는 것을 잊지 마십시오.

filePath 변수는 스택에 할당 된 고정 크기 배열이며 argv [i] 힙의 일부 메모리에 대한 포인터입니다. filePath가 포인터가 아니기 때문에 filePath에 할당 할 수 없습니다. filePath는 데이터 자체입니다.

2

filePath은 배열이므로 C에서 배열의 주소를 수정할 수 없습니다. string family을 사용하여 문자열을 복사 할 수 있습니다.

1

는 당신이 필요합니다 : 없습니다 261 바이트의 배열로, argv를 위해

FILE *src; 
char *filePath; 
filePath = argv[1]; 

점해야 filePath 때문이다. 당신이 원하는 경우에, 당신은 은 argumenti 배열에를 복사 할 수 있습니다 :

FILE *src; 
char filePath[261]; 
strncpy(filePath, argv[1], sizeof(filePath)); 

:

FILE *src; 
char filePath[261]; 
strcpy(filePath, argv[1]); 

또는 더 나은, 당신은 (재앙을 초래할 것이다)을 사용할 수있는 것보다 더 많은 바이트를 복사 위험 방지하기 위해 또는 다시

#define MAX_FILESIZE 261 

FILE *src; 
char filePath[MAX_FILESIZE]; 
strncpy(filePath, argv[1], MAX_FILESIZE); 
관련 문제