Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Склеить вде строки


Автор: icepro 18.4.2008, 12:02
Понимаю это уже спрашивали 100 раз, но у меня немного не стандартный случай.
Пишу консольную программу, она дожна брать параметры из коммандной строки,
типа: void main(int argc, char* argv[])
проблема состоит в том что у меня есть переменная типа char* и мне в нее нужно добавить еще две такие же, тоесть
есть char* f_param;
и мне нeжно сделать так что б она была такого вида f_param="argv[2]_argv[3]"
Понимаю это елементарная конкатенация, но компилер(студия 2005) то и дело выдает ошибку, про невозможность конвертации чар в чар* и ну и т.п.
Дайте пожалуйста робочий код!
Заранее спасибо!


Автор: just_geek 18.4.2008, 12:41
показал бы код, для начала smile

Автор: Andrey44 18.4.2008, 12:41
Код

char* f_param = _malloca(sizeof(argv[2])+sizeof(argv[3])+1);
sprintf(f_param, "%s%s", argv[2], argv[3]);

Автор: creatorcode 18.4.2008, 13:03
Цитата(Andrey44 @  18.4.2008,  12:41 Найти цитируемый пост)
char* f_param = _malloca(sizeof(argv[2])+sizeof(argv[3])+1);

sizeof(argv[2]) вернет размер указателя, а не длину строки. Поэтому надо использовать strlen(argv[2])

Автор: Andrey44 18.4.2008, 13:20
creatorcode, согласен smile что-то я протупил немного

Автор: Graf_h 18.4.2008, 15:21
Код

#include <sтring.h>
char strcat(char *str1, const char *str2);

Функция strcat() присоединяет к строке str1 копию строки str2 и завершает строку str1 нулевым символом. Конечный нуль-символ, первоначально завершающий строку str1, перезаписывается первым символом строки str2. Строка str2 при этом не изменяется!

Код

#include <sтring.h>
char strncat(char *str1, const char *str2, size_t count);

Функция strncat() присоединяет к строке, адресуемой параметром str1, не более count символов строки, адресуемой параметром str2, завершая "результирующую" строку str1 нулевым символом

Вот так  smile 

Автор: creatorcode 18.4.2008, 15:48
Graf_h, тогда придется использовать и strcpy
Код

strcpy(f_param,argv[2]);
strcat(f_param,argv[3]);


Автор: baldina 18.4.2008, 15:57
Код

char* f_param = _malloca(strlen(argv[2])+strlen(argv[3])+2);
sprintf(f_param, "%s_%s", argv[2], argv[3]);
подчеркивание забыли

Автор: Graf_h 18.4.2008, 16:02
creatorcode, smile 
Может стоит человеку рабочий код написать, пусть не парится?

Автор: creatorcode 18.4.2008, 17:25
Graf_h, почему бы и нет? smile
Вариант Andrey44:
Код

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char* argv[])
{
    char* f_param=malloc(strlen(argv[2])+strlen(argv[3])+2);
    sprintf(f_param, "%s_%s", argv[2], argv[3]);
    printf("%s\n",f_param);
}

Ваш вариант:
Код

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char* argv[])
{
    char* f_param=malloc(strlen(argv[2])+strlen(argv[3])+2);
    strcpy(f_param,argv[2]);
    strcat(f_param,"_");
    strcat(f_param,argv[3]);
    printf("%s\n",f_param);
}

Автор: Graf_h 18.4.2008, 17:31
creatorcode,  smile ! но есть ошибки  smile return 0 пропустили?

Автор: creatorcode 18.4.2008, 17:34
Graf_h, это не ошибки smile 
return 0 в main необязателен.
P.S. Мой вариант:
Код

#include <iostream>
#include <string>
int main(int argc,char* argv[])
{
    std::string f_param(argv[2]);
    f_param.push_back('_');
    f_param+=argv[3];
    std::cout<<f_param<<std::endl;
}

Автор: Graf_h 18.4.2008, 17:38
creatorcode Graf_h, это не ошибки  
warning'main' : function should return a value; 'void' return type assumed
Linking...



creatorcode, STL рулит  smile  smile 

Автор: creatorcode 18.4.2008, 19:28
Цитата(Graf_h @  18.4.2008,  17:38 Найти цитируемый пост)
warning'main' : function should return a value; 'void' return type assumed

Всё-таки warning, а не error. К тому же, смотря чем компилить.
P.S. А STL действительно рулит  smile

Автор: warmonger_ 18.4.2008, 22:58
Цитата(creatorcode @  18.4.2008,  16:34 Найти цитируемый пост)
return 0 в main необязателен.

если писать не по стандарту...

Автор: creatorcode 19.4.2008, 01:26
Цитата(warmonger_ @  18.4.2008,  22:58 Найти цитируемый пост)
если писать не по стандарту... 

Стандарт гласит:
Цитата

If the return type of the main function is a type compatible with int, a return from the
initial call to the main function is equivalent to calling the exit function with the value
returned by the main function as its argument; reaching the } that terminates the
main function returns a value of 0
.


Автор: icepro 19.4.2008, 10:31
Ребята огромное спасибо! Не ожидал что так охотно поможете!
Буду пробовать!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)