C Sprintf () добавляет ненужные символы - PullRequest
2 голосов
/ 26 октября 2011

Я пытался использовать sprintf для добавления int, string и int.

sprintf(str,"%d:%s:%d",count-1,temp_str,start_id);

Здесь значение start_id всегда одинаково.Значение temp_str, которое является символом *, увеличивается каждый раз.Я получаю правильный вывод в течение некоторого времени, а затем мой sprintf начинает печатать ненужные символы между temp_str и startid.Так что моя улица повреждена.

Может кто-нибудь объяснить это поведение?

пример

на счет 11

11: 1: 2: 3: 1:2: 3: 1: 2: 3: 1: 21: 3: 1: 2: 3: 1: 2: 3: 1: 2: 3: 1: 2: 3: 1: 2: 3: 1: 2:3: 1: 2: 3: 1: 2: 3: 1: 2: 3: 1: 2: 3: 1: 2: 3: 1: 2: 3: 1: 2: 3: 1: 2: 3:1: 2: 3: 1: 2: 3: 1: 2: 3: 1: 2: 3: 1: 2: 3: 1: 2: 3: 1: 2: 3: 1: 2: 3: 1:2: 3: 1: 2: 3: 1: 2: 3: 1: 2

при счете 8

8: 1: 2: 3: 1: 2: 3: 1:2: 3: 1: 21: 3: 1: 2: 3: 1: 2: 3: 1: 2: 3: 1: 2: 3: 1: 2: 3: 1: 2: 3: 1: 2:3: 1: 2: 3: 1: 2: 3: 1: 2: 3: 1: 2: 3: 1: 2: 3: 1: 2: 3: 1: 2: 3: 1: 2: 3:1: 2: 3: 1: 2: 3: 1: 2: 3: 1: 2: 3: 1: 2: 3: 1: 2: 3: 1: 2: 3: 1: 2: 3: 1:2: 3: 1: 2: 3: 1: 2: 3: 1�: 2

Я не понимаю, почему и как «�» добавляется к строке

Ответы [ 4 ]

4 голосов
/ 26 октября 2011

Либо temp_str не завершается нулем в какой-то момент, либо вы запустили буфер для str, и какой-то другой доступ к памяти влияет на него.

Не видя код, это сложно сказать, но, если вы удвоите размер str и поведение проблемы изменится, то, вероятно, последнее.

0 голосов
/ 26 октября 2011

Вы бежите от конца temp_str.Проверьте свои границы и убедитесь, что он нулевой завершен.Хватит прибавлять солнце до конца.

0 голосов
/ 26 октября 2011

1> попытайтесь запомнить свой буфер str с 0 до, используя sprintf

2> Значение temp_str, которое является символом *, увеличивается каждый раз, что вы подразумеваете под этим?

это должен быть обычный указатель символа, который будет указывать на некоторую строку и эта строка должна заканчиваться нулем , и это будет скопировано в str

3> общий размер при объединении всех трех аргумент не должен превышать размер буфера str

0 голосов
/ 26 октября 2011

Похоже, строка temp_str не заканчивается NUL. Вы можете прервать его перед вызовом sprintf или, если вы знаете длину, которую хотите распечатать, используйте оператор форматирования %.*s, например:

int str_len = ...;     // Calculate length of temp_str
sprintf(str, "%d:%.*s:%d", count-1, str_len, temp_str, start_id);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...