Разница между одинарными и двойными кавычками заключается в том, что двойные кавычки объявляют строку, а одинарные кавычки объявляют один символ. Попробуйте сделать это, вы получите синтаксическую ошибку:
'More than one character'
Причина, по которой ваш код вывел несколько случайных символов, состоит в том, что строки не являются целыми числами, как большинство других типов данных, а являются указателями. Это означает, что при вводе "A string"
результатом выражения является область памяти, в которой хранятся символы. Это может быть где угодно в памяти, в зависимости от того, когда вы запускаете программу. Итак, когда вы добавили random()
в строку, он дал вам случайный адрес памяти! Заявление было эквивалентно этому на английском языке:
Store the characters "A" in memory, and then give me the memory
address a random amount of cells later.
Случайное количество ячеек позже может быть любым другим в вашей программе. Указатель был интерпретирован как символ (из-за %c
), но это не было предназначено, давая вам, казалось бы, случайный вывод.