Установить одну строку равной другой строке без <string.h> - PullRequest
0 голосов
/ 17 января 2019

Как мне сделать 2 строки равными друг другу в C без использования <string.h>? Наиболее очевидный способ, который я имею в виду, приведен ниже, однако он вызывает ошибку недопустимого инициализатора.

Например:

    char str1[100] = "This is a string";
    char temp[100] = str1;

Ответы [ 3 ]

0 голосов
/ 17 января 2019

Вы можете сделать что-то вроде этого. Не инициализируйте temp. Просто продвигайте указатели на символы, пока не достигнете нулевого терминатора в str1. Это будет менее эффективно, чем реализация strcpy.

    char *p = str1;
    char *q = temp;

    while (*p)
            *q++ = *p++;

    *q = '\0';
0 голосов
/ 17 января 2019

Если вы хотите скопировать одну строку в другую без использования <string.h>, вы должны запустить цикл, начиная с первой позиции str1, пока не найдете '\0', и скопировать каждый элемент в temp. не забудьте добавить '\0' в конце temp, иначе при печати вы увидите какое-то значение мусора.

char str1[100] = "This is a string";
char temp[100];
int i;
for(i = 0; str1[i] != '\0'; i++){
    temp[i] = str1[i];
}
temp[i] = '\0';
0 голосов
/ 17 января 2019

Вы не можете использовать массив для инициализации другого массива. И вы не можете использовать присваивание между массивами.

Единственный способ - сделать явное копирование из одного массива в другой. А для байтовых строк с нулевым символом в конце, то обычным способом через strcpy:

char str1[100] = "This is a string";
char temp[100];

strcpy(temp, str1);

И чтобы получить правильное объявление strcpy, вы должны включить <string.h>. Обойти это невозможно (если только вы не хотите написать свою strcpy -подобную функцию, против которой я настоятельно рекомендую).

Конечно, вы также можете скопировать весь массив, включая все неинициализированное содержимое, используя memcpy, но он также объявлен в <string.h>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...