2014-02-04 1 views
1

Это предупреждение, которое я получаю.предупреждение: присваивание делает целое число от указателя без литой ARGV

copyit.c: In function ‘main’: 
copyit.c:15: warning: assignment makes integer from pointer without a cast 
copyit.c:16: warning: assignment makes integer from pointer without a cast 

Линии кода, соответствующие этим требованиям, начинаются с указателей (*).

char source[128],target[128],buffer[512]; 

if(argc==3) { 
*source = argv[1]; 
*target = argv[2]; 
} 

Я просто хочу, чтобы назначить эти две вещи, так что я могу передать их из командной строки, как и что я могу использовать их в моей ручкой (например: inhandle = открыт (источник, O_RDONLY); Спасибо .

ответ

-1

Использование зЬгсра() из string.h:

strcpy(source,argv[1]); 
strcpy(target,argv[2]); 
+0

Спасибо, я сделал это, но, как ни странно, у меня появилось предупреждение только для первого: это предупреждение: несовместимое неявное объявление встроенной функции 'strcpy' Мысли? – vivav

+0

Включить заголовок ''. – haccks

+0

Включить string.h наверху – Abend

4

ARGV массив строковых указателей. Вы просто должны изменить source и target к char * или const char * вместо массивов и изменить код

source = argv[3]; 
target = argv[4]; 

это сделает его Работа. Это также предотвратит переполнение буфера, если вы скопировали строки в массивы. Это также означает, что ваше приложение будет обрабатывать длинные пути к файлам.

+1

@haccks: более внимательно прочитать ответ. Он предложил изменить объявления 'source' и' target', чтобы они были как 'char *', * not * array. Это хорошая идея, и, вероятно, лучший ответ здесь; вероятно, нет необходимости копировать содержимое массива. –

+0

@KeithThompson; Сожалею. Я пропустил это. – haccks

 Смежные вопросы

  • Нет связанных вопросов^_^