Строковые литералы доступны только для чтения.
В любом случае, то, что вы пытаетесь сделать, кажется, вы запутались.
Строковый литерал: char *sl = "string literal";
Anнеинициализированный символьный указатель: char *s2;
Для того, чтобы сделать копию, которая вам нравится, вам сначала нужно выделить память для строки.
Кроме того, вы не можете выполнять арифметику указателей с массивом.Массивы и указатели не одно и то же!
Кроме того, вы должны помнить происхождение указателя s2
, так как после увеличения его до завершения копирования вам потребуется сброситьуказатель .. Упражнение: подумайте, что произойдет, если вы сделали копию в функции (желательно с именем mystrcpy`) ...
Полный пример:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
char s1[10]="Youssef";
char *s2 = malloc(sizeof(char) * (strlen(s1) + 1)); // +1 for the NULL-terminator
int i = 0;
char *origin_s2 = s2;
while(s1[i] != '\0')
*s2++ = s1[i++];
*s2 = '\0';
s2 = origin_s2;
printf("%s\n", s2);
return 0;
}
Вывод:
Youssef
PS: Настоятельно рекомендуется проверить, было ли динамическое выделение памяти успешным (проверьте, не является ли возвращаемое значение malloc()
не NULL
).