Ввод данных из командной строки

toyi

не могу понять как ввести данный из командной строки для вот этого кода нужно ввести в функцию 2 строки
#include <stdio.h>
 
//индексный
char* strcpy(char* string1, const char* string2)
{
    int i=0;
    while(string2[i]!='\0')
    {
        string1[i]=string2[i];
        ++i;
        
    }
    string1[i]='\0';
    return string1  ;
}
 
char* strcop(char* string1, const char* string2)
{   
    int i;
    for (i=0; *(string2+i) != 0; i++)
    {
     *(string1++)=*(string2++);
    }
    return string1;
}
 
 
int main () 
{
    char St1[500]= " Takaya pervaya stroka";
    char St2[500]= " Vot takaya vtoraya stroka";
 
    printf ("stroka1: %s\n", St1);
    printf ("stroka2: %s\n", St2);
 
    strcpy (St1,St2);
    
    strcop (St1,St2);
 
    printf ("stroka1aftercopy: %s\n", St1);
    printf ("stroka2aftercopy: %s\n", St2);
 
 
}
14 ответов

toyi

не могу понять как ввести данный из командной строки
Не могу понять что и куда ты хочешь ввести, но в функции strcop у тебя ошибка.


toyi

у меня не получается разобраться с этим вот такую ерунду написал
#include <stdio.h>
 
//индексный
char* strcpy(char* string1, const char* string2)
{
    int i=0;
    while(string2[i]!='\0')
    {
        string1[i]=string2[i];
        ++i;
        
    }
    string1[i]='\0';
    return string1  ;
}
 
char* strcop(char* string1, const char* string2)
{   
    int i;
    for (i=0; *(string2+i) != 0; i++)
    {
     *(string1++)=*(string2++);
    }
    return string1;
}
 
 
int main (int argc, char* argv[]) 
{
    //char St1[500]= " Takaya pervaya stroka";
    //char St2[500]= " Vot takaya vtoraya stroka";
 
    printf ("stroka1: %s\n", argv[1]);
    printf ("stroka2: %s\n", argv[2]);
 
    strcpy (argv[1],argv[2]);
    
    strcop (argv[1],argv[2]);
 
    printf ("stroka1aftercopy: %s\n", argv[1]);
    printf ("stroka2aftercopy: %s\n", argv[2]);
 
 
}


toyi

вот такую ерунду написал
Ерунда неплоха, но не советую писать что-либо внутрь argv. Ты точно хотел передавать две строки в качестве параметров при запуске exe, а не вводить их с клавиатуры во время работы программы? К тому же перед копированием нужно убедиться, что в целевом массиве достаточно места под новую строку.


toyi

Да я точно хочу передать две строки из командной строки в виде параметров, но не могу понять как это сделать!!!


toyi

но не могу понять как это сделать
toyi, что нужно было сделать в программе, ты это уже сделал... Нужно либо в IDE компилятора указать в аргументах пару строк, заключенных в кавычках, либо вызвать исполняемый файл вручную: prog.exe "моя строка 1" "моя строка 2"


toyi

Но она не работает( По идее я должен запускть , потом должна появляться командная строка я в ней ввожу 2 строки и программа с ними работает


toyi

Да я точно хочу передать две строки из командной строки в виде параметров
По идее я должен запускть , потом должна появляться командная строка я в ней ввожу 2 строки
Ха, одно дело, когда строки передаются в виде параметров командной строки, и совсем другое, когда программа их считывакт со стандартного ввода.
void main() {
  char str1[100], str2[100];
  printf("Str1: ");
  gets(str1);
  printf("Str2: ");
  gets(str2);
}
Но по хорошему, если ты пишешь на C++, это все делать через потоки ввода/вывода cin/cout.


toyi

Это пример стандартного ввода? Так как сделать это с помощью argc argv?


toyi

Это пример стандартного ввода?
Да.
Так как сделать это с помощью argc argv?
Нужно либо в IDE компилятора указать в аргументах пару строк, заключенных в кавычках, либо вызвать исполняемый файл вручную: prog.exe "моя строка 1" "моя строка 2"
Компилируешь свою программу, получаешь exe-файл на выходе. Запускаешь его через cmd/bat/ярлык и т.п. с указанием параметров через пробел, если необходимо передать в качестве параметра строку с пробелами, то строка отделяется кавычками. При запуске программы в argc будет записано кол-во переданных параметров, в а массиве argv - сами параметры. В качестве параметра с индексом 0 всегда идет путь к текущему исполняемому файлу.


toyi

Вопрос в другом так ли я записал код ? Не могу понять почему он не работает, выдаёт ошибку при компиляции! Не подскажите что не так в коде?


toyi

выдаёт ошибку при компиляции
Если утверждаешь о какой-то ошибке, то неплохо было бы хотя бы привести тут ее текст.


toyi

Во 2 варианте моего кода всё нормально?


toyi

Во 2 варианте моего кода всё нормально?
toyi, по крайней мере у меня он скомпилировался. Если твой компилятор отличен от моего, то он может выдавать некоторые ошибки при компиляции, поэтому я тебя и попросил привести их тут.Но у тебя в коде есть пара недостатков, которые могут привести к ошибке времени исполнения - программа крешнется по середине работы... О них я уже писал ранее.


toyi

Недостаток который приводит к ошибке времени исполнения это то что в копируемую строку не проверяется достаточно ли места? Или что то другое ? P.s. я просто туго уже соображаю чего то ночью