strcat() 표준 라이브러리 함수는 대상 및 소스 문자열의 두 매개 변수를 허용합니다.
이 의미, 당신이 이런 식으로 뭔가하려고하면 당신은 실제로이 같은 말을하는지
strcat("reverse_", argv[1]);
을 (수정할 수 없기 때문에,
"reverse_" = "reverse_" + argv[ 1 ]
잘못 요식 또는 , 적어도, 당신은하지 말아야합니다) 리터럴 "reverse_". 이 과정에서 코드에서 다른 리터럴을 사용하지 못하게되므로 길이를 변경할 수 없습니다.
@cnicutar는 당신에게 당신이 찾고있는 결과를 달성하는 방법에 대한 힌트를 제공하고 있지만 경우에 당신은 당신이 다음 한 과정을 준수하고 싶은, 여기에 대한 설명입니다
a) 귀하가 필요 메모리에서 반전 된 파일 이름을 저장할 장소를 예약하십시오.
b) "reverse_"라고 써야합니다.
c)는 마지막으로, ARGV에있는 파일 이름 [1]
첫 번째 단계는 놀랍게도 가장 어려운 하나입니다 CONCAT해야합니다. 얼마나 많은 공간이 필요합니까? 주어진 파일 이름 255 자까지 될 수
http://en.wikipedia.org/wiki/NTFS
http://en.wikipedia.org/wiki/Ext4
는 ... 그러나, 어떠한 절대 또는 상대 경로를 입력하는 사용자를 중지하지 않는다. 이것은 아마도 명령 줄에서 처리 할 수있는 최대 문자 길이를 지정해야한다는 것을 의미합니다. 이는 ...
http://support.microsoft.com/kb/830473
¡ 8192 자! ...이 곳이 우리를 선도하지 않습니다.
가장 좋은 방법은 argv [1] 문자열의 문자 수를 계산 한 다음 접두어에 필요한 문자를 추가하고 그 값에 1을 더한 값을 더하는 것입니다. 문자열 끝의 표시를 저장하십시오.
const char * prefix = "reserve_";
int needed = strlen(argv[ 1 ]) + strlen(prefix) + 1;
char store[ needed ];
strcpy(store, prefix); // store <- prefix
strcat(store, argv[ 1 ]); // store <- store + argv[ 1 ]
printf("%s\n", store);
이러한 종류의 벡터를 사용할 수없는 경우 동적 메모리를 예약하고 사용해야합니다.
const char * prefix = "reserve_";
int needed = strlen(argv[ 1 ]) + strlen(prefix) + 1;
char * store = (char *) malloc(sizeof(char) * needed);
strcpy(store, prefix); // store <- prefix
strcat(store, argv[ 1 ]); // store <- store + argv[ 1 ]
printf("%s\n", store);
free(store);
희망이 있습니다.
가변 배열, C99에만 해당. – phoxis
해결 된 변수 배열 문제가 @phoxis에 의해 지적되었습니다 – Baltasarq
정말 고마워요. 이것은 매력처럼 작동했습니다. 다시 한 번 감사드립니다. –