Я только начал изучать C, и я совершенно не уверен, как «правильно» получить доступ и редактировать значения символьного указателя.Как редактировать значения строки char * в C?
Например:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char* text = malloc(20);
char* othertext = "Teststring";
do
{
*text++ = *othertext++;
} while (*othertext != '\0');
printf("%s\n", text + 3);
free(text);
return 0;
}
Во-первых, почему функция делать-то время не работает? Содержимое «othertext» не копируется в «текстовый» указатель. Кроме того, программа вылетает, когда выполняется бесплатный (текст)!
Мы знаем, что этот код работает, если добавить второй указатель:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char* text = malloc(20);
char* othertext = "Teststring";
char *ptr1 = text;
char *ptr2 = othertext;
do
{
*ptr1++ = *ptr2++;
} while (*ptr2 != '\0');
printf("%s\n", text + 3);
free(text);
return 0;
}
Но оба указателя имеют в основном один и тот же адрес! Они имеют одинаковые значения в отладчике, так как второй указатель имеет значение?
В качестве окончательного замечания: Нам не разрешено использовать string.h. И мы знаем, что между массивами и указателями есть тонкая разница. Но нам нужно конкретно понять, как работает char *!
«char *» не является ни строкой, ни массивом., Это указатель на символ. C не имеет строкового типа. Это все конвенция. – Olaf
Почему «правильно» в Dr Evil цитирует? У вас есть какая-то странная интерпретация «правильной», которая отличается от обычной? –
Потому что, по-видимому, у нас есть «неправильная» концепция того, как ее следует копировать;) –