Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2015, 15:46   #1
Fixator
Пользователь
 
Регистрация: 05.12.2013
Сообщений: 20
Вопрос Язык С. Как скопировать параметр командной строки в буфер?

Добрый вечер. Как скопировать параметр командной строки в буфер, функцией "strcpy"?

Делаю так...
Код:
// UTF8 file format.

#include <stdio.h>
#include <string.h>

char main(int argc, char **argv)
{
#define  src_file_name  argv[1]
#define  prg_file_name  argv[0]

char common_dir_path[255+1];
char index;

    strcpy(common_dir_path, prg_file_name);
    index = strlen(common_dir_path);
    while (common_dir_path[index] != '\\') {common_dir_path[index] = 0; index--;}
    strcpy(common_dir_path[index], src_file_name);    // <--- ошибка тут.
    puts(common_dir_path);

return 0;
}
но чего-то, не компилируется. Компилятор пишет - "Project.c:18: warning: assigment makes pointer from integer without a cast".
Что не так? Как это исправить?
Не судите строго. Я только учусь языку С.

Последний раз редактировалось Fixator; 14.12.2015 в 15:54.
Fixator вне форума Ответить с цитированием
Старый 14.12.2015, 16:07   #2
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

common_dir_path[index] - это char, а не char*. Уберите [index]
Ну и
Код:
unsigned int index ;//а не char
Croessmah вне форума Ответить с цитированием
Старый 14.12.2015, 17:48   #3
Fixator
Пользователь
 
Регистрация: 05.12.2013
Сообщений: 20
Вопрос

Цитата:
Сообщение от Croessmah Посмотреть сообщение
Ну и
Код:
unsigned int index ;//а не char
Поменял.
Цитата:
Сообщение от Croessmah Посмотреть сообщение
Уберите [index]
Но мне, надо обращаться через "index"! Там, находится смещение, относительно начала строки.
Цитата:
Сообщение от Croessmah Посмотреть сообщение
common_dir_path[index] - это char, а не char*
Всё равно непонятно (я, только недавно, начал изучать С). В коде, common_dir_path - это адрес буфера, в 257 байт( тип данных char), выделенный под строку, содержащую путь к файлу. Так почему, я немогу дописать в этот буфер, функцией strcpy, параметр командной строки - ведь он, тоже имеет тип char?

Мне надо в буфер common_dir_path, дописать параметр командной строки (имя файла), с использованием index'а, функцией strcpy. Как это сделать?
Не судите строго. Я только учусь языку С.

Последний раз редактировалось Fixator; 14.12.2015 в 17:54.
Fixator вне форума Ответить с цитированием
Старый 14.12.2015, 19:37   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

strcpy(common_dir_path + index, src_file_name);
waleri вне форума Ответить с цитированием
Старый 14.12.2015, 22:22   #5
Fixator
Пользователь
 
Регистрация: 05.12.2013
Сообщений: 20
Печаль

Цитата:
Сообщение от waleri Посмотреть сообщение
strcpy(common_dir_path + index, src_file_name);
К сожалению, не помогло.

Теперь компилируется. Но при запуске, программа падает, с сообщением об ошибке. Как быть? Что делать?
Изображения
Тип файла: png Screenshot.png (4.7 Кб, 48 просмотров)
Не судите строго. Я только учусь языку С.
Fixator вне форума Ответить с цитированием
Старый 14.12.2015, 22:32   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я не очень понял что тебе нужно, но если стелепатировать то:
Код:

char main(int argc, char **argv)
{
#define  src_file_name  argv[1]
#define  prg_file_name  argv[0]

char common_dir_path[255+1];
char index;

for(int i=0;i<argc;i++){
 strcpy(&common_dir_path,argv[i]);
 Работает с common_dir_path
 puts(common_dir_path);
}


return 0;
}
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.12.2015, 23:41   #7
Fixator
Пользователь
 
Регистрация: 05.12.2013
Сообщений: 20
По умолчанию

Мне надо, к пути, добавить название файла.

Например, я ввел в командную строку: Project.c Temp

1.Выделяю буфер под строку.
2.Копирую 0-ой аргумент, в буфер.
3.Теперь, строка буфера, выглядит так: F:\Project\Project.c
4.В буфере, удаляю конец файла. Теперь, строка в буфере, выглядит так: F:\Project\
5.Далее, мне надо копировать 1-ый аргумент командной строки в буфер, начиная с символа \(Смещение символа \, хранится в index'е).
Чтобы строка в буфере, была такая: F:\Project\Temp

Вот, как раз, шаг 5 - неполучается. Придётся наверно, заменить библиотечную функцию, на самописную.
Не судите строго. Я только учусь языку С.
Fixator вне форума Ответить с цитированием
Старый 15.12.2015, 02:06   #8
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Конкатенация строк - strcat. Скопирует одну строку в конец другой. Конечно, о размере буфера должен позаботиться программист. Ну и лучше использовать strncat, дабы у этой фвнкции есть третий параметр - максимальное кол-во символов для добавления.
Croessmah вне форума Ответить с цитированием
Старый 15.12.2015, 03:13   #9
Fixator
Пользователь
 
Регистрация: 05.12.2013
Сообщений: 20
По умолчанию

Ясно. Никто из профессианалов, не может сказать человеческим языком - почему strcpy не работает, и как, её заставить работать?. Профессионалы блин.
Цитата:
Сообщение от Croessmah Посмотреть сообщение
Конкатенация строк - strcat. Скопирует одну строку в конец другой. Конечно, о размере буфера должен позаботиться программист. Ну и лучше использовать strncat, дабы у этой фвнкции есть третий параметр - максимальное кол-во символов для добавления.
Ладно - попробую.
Не судите строго. Я только учусь языку С.
Fixator вне форума Ответить с цитированием
Старый 15.12.2015, 07:40   #10
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Нам что, за вас дебажить?
Что например будет, если в common_dir_path не будет символа \?
И кстати, что это вы за ассемблерщик, если выходите за пределы массива?
Таких в наших краях называют одним словом - ламер.
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Язык С. Как получить, размер аргумента командной строки? Fixator Общие вопросы C/C++ 26 15.12.2015 02:57
Скопировать таблицу в буфер agregator Microsoft Office Word 4 21.10.2012 16:42
Параметр в командной строке Nina+ Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 30.05.2011 21:54
В командной строке вводится 1 параметр Snapper Помощь студентам 5 18.12.2010 09:39
Как скопировать текст в буфер обмена с одного edit-a и вставить в другой SeRhy Общие вопросы Delphi 2 26.07.2008 23:02