Я написал этот кодПочему этот код не меняет строку и вызывает переполнение буфера?
#include <stdio.h>
int main()
{
char String[] = "Hello the world!";
char *pointer = String;
int i;
printf(" %s\n", pointer);
pointer = "Helllooooo the worlldddddd";
printf("Hello %s\n", pointer);
printf("Hello %s\n", String);
return 0;
}
, но я не могу понять, как эта линия работает нормально.
pointer = "Helllooooo the worlldddddd";
, но я получил этот выход
Hello the world!
Hello Helllooooo the worlldddddd
Hello Hello the world!
Как вы видите, это не может изменить String
значение, но он показывает больше, чем исходное число символов. Разве это не должно привести к переполнению буфера? Разве это не уничтожит другие переменные?
«Привет, мир!» И «Helllooooo the worlldddddd» - это две разные строки, расположенные в двух разных частях памяти. С помощью 'pointer = ...' вы устанавливаете 'pointer' как адрес любой из этих строк (т. Е. Устанавливаете его для указания на эту строку). –