Функция стандартной библиотеки strcat () принимает два параметра: место назначения и исходную строку.
Это означает, что при попытке выполнить что-то вроде этого:
strcat( "reverse_", argv[1] );
фактически говоря что-то вроде этого:
"reverse_" = "reverse_" + argv[ 1 ]
.. что неверно, так как вы не можете изменить (или, по крайней мере, не должны) литерал "reverse_".Несомненно, вы не сможете изменить его длину, поскольку в процессе вы нарушите другие литералы использования в вашем коде.
@ cnicutar подсказал вам, как достичьрезультат, который вы ищете, но если вы хотите присоединиться к процессу, которому следовали, вот объяснение:
a) Вам нужно зарезервировать место в памяти, в котором вы будете хранить обратное имя файла.
b) Вам нужно написать туда "reverse_".
c) Наконец, вам нужно объединить имя файла в argv [1]
Первый шагшокирующе самый сложный.Сколько места нужно?Заданное имя файла может содержать не более 255 символов:
http://en.wikipedia.org/wiki/NTFS
http://en.wikipedia.org/wiki/Ext4
... однако ничто не мешает пользователю ввести абсолютное значениеили относительный путь.Это означает, что, вероятно, мы должны указать максимальную длину символа, которую может обработать командная строка, которая составляет ...
http://support.microsoft.com/kb/830473
¡8192 символа! ... это ни к чему нас не приведет.
Гораздо лучший метод, обеспечивающий наилучшую точность, - это подсчитать количество символов в строке argv [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 );
Надеюсь, что этопомогает.