В моем классе мы пишем нашу собственную копию функции malloc() C. Для того, чтобы проверить свой код (который может в настоящее время выделить пространство штраф) Я использую:Когда printf ("% s", char *) прекращает печать?
char* ptr = my_malloc(6*sizeof(char));
memcpy(ptr, "Hello\n", 6*sizeof(char));
printf("%s", ptr);
Выход обычно такой:
Hello
Unprintable character
Некоторые отладки понял, что мой код не был причиной этого сам по себе как память PTR выглядит следующим образом:
[24 байт мета информации] [Количество запрашиваемых байт] [Отступы]
так я понял, что Printf тянулся в обивке, который является просто мусором. Так что я провел испытание: printf("%s", "test\nd");
и получил:
test
d
Что заставляет меня задаться вопросом, когда же Е («% S», символ *) остановить печать символов?
Dur, я должен использовать \ 0 для завершения строки? Dur Dur Dur – user327406
Вам не нужно добавлять \ 0 самостоятельно. Когда вы создаете литеральную строку или получаете ее как ввод, C добавляет ее для вас. Вы действительно не видите \ 0. Эта строка «Hello \ n» имеет семь символов, если вы посмотрите на фактический код сборки. – Uri