printf вылетает программа - PullRequest
0 голосов
/ 03 мая 2011

Я использую sprintf для преобразования int в строку, а затем, если я использую printf, программа падает, в противном случае она работает нормально.Может кто-нибудь сказать мне причину?

typedef char* string;
buffer[8] = (string*)malloc(sizeof(string));
buffer[8] = sprintf(buffer[8],"%d",inf[i].mPermissions);

Пока все работает нормально, но когда я печатаю это так:

printf("%s",buffer[8]);

... моя программа падает.

Ответы [ 2 ]

5 голосов
/ 03 мая 2011
typedef char* string;

Язык Си не имеет строкового типа. Указатель на символ не то же самое, что выделенная строка.

buffer[8]=(string*)malloc(sizeof(string));

Почему вы устанавливаете номер элемента 9 в буфере в строку? (C индексируется нулем, поэтому 0-8 = 9 пунктов). Это массив указателей? Возможно, вы хотели выделить буфер из 8 символов?

Нет смысла типизировать результат malloc на языке Си. В C ++ вам придется выполнять приведение.

Вы указываете размер указателя, а не размер буфера.

buffer[8]=sprintf(buffer[8],"%d",inf[i].mPermissions);

Первым аргументом sprintf должен быть выделенный буфер, а не символ (один элемент буфера).

printf("%s",buffer[8]);

Вы пытаетесь напечатать строку, но передаете элемент буфера (символа).


Чтобы подвести итог, я настоятельно рекомендую прочитать первые главы книги по языку C, касающиеся массивов и указателей , прежде чем пытаться использовать любую форму обработки строк или динамического выделения памяти. Если вы не знаете, как что-то работает, не рискуйте синтаксисом.

1 голос
/ 03 мая 2011

Уверен, вы не выделяете буфер, в который пишет sprintf.

Вам нужно что-то вроде:

int myNumber = 42;
char myBuffer[12];
sprintf(myBuffer, "%d", myNumber);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...