реклама на сайте
подробности

 
 
> IAR и sprintf
DeXteR
сообщение Jul 27 2006, 16:51
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 319
Регистрация: 2-08-05
Из: Одесса
Пользователь №: 7 287



Добрый день Уважаемый специалисты

Пишу простой код в IAR EWAVR 4.20
В первом случае функция sprintf работает нормально
во втором - глючно

Подскажите что я делаю нетак ??


#include "iom16.h"
#include "stdio.h"

int NUM = 1234;
char STR1[16];

int NUM2 = -1234;
char STR2[16];


int main( void )
{

sprintf(STR2, "%i", NUM);
sprintf(STR1, "%i", NUM2);


while (1)
{}

}
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rezident
сообщение Jul 27 2006, 17:08
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Первый параметр у sprintf должен быть указателем на буфер строки типа (char *). А что такое в вашем случае ST2 и ST1 компилятору видимо непонятно как и мне.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 28 2006, 07:29
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(rezident @ Jul 27 2006, 20:08) *
Первый параметр у sprintf должен быть указателем на буфер строки типа (char *). А что такое в вашем случае ST2 и ST1 компилятору видимо непонятно как и мне.
В данном случае все правильно. STR1 и STR2 - массивы из 16 элементов типа char. Поскольку массивов как таковых в С нет, то имя массива тождественно указателю на его первый элемент. Т.е. STR1, STR2 имеют тип char *. Поэтому запись char *ptr = STR1; вполне корректна. Она тождественна записи char *ptr = &STR1[0];
И с другой стороны в С массивы в функции передаются как указатель на первый элемент. Так что с какой стороны ни подойди - в этом месте ошибки нет.
Цитата(DeXteR @ Jul 27 2006, 19:51) *
В первом случае функция sprintf работает нормально
во втором - глючно
А если поменять их местами? Т.е. проблема в чем - вообще любой второй вызов функции глючит или именно преобразование отрицательного числа? Пока могу предположить налезание стеков друг на друга. sprintf требовал стека более 100 байт. Сколько точно - не помню :-( А! можно в .map посмотреть.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
rezident
сообщение Jul 28 2006, 09:41
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(Сергей Борщ @ Jul 28 2006, 13:29) *
Цитата(rezident @ Jul 27 2006, 20:08) *

Первый параметр у sprintf должен быть указателем на буфер строки типа (char *). А что такое в вашем случае ST2 и ST1 компилятору видимо непонятно как и мне.
В данном случае все правильно. STR1 и STR2 - массивы из 16 элементов типа char. Поскольку массивов как таковых в С нет, то имя массива тождественно указателю на его первый элемент. Т.е. STR1, STR2 имеют тип char *. Поэтому запись char *ptr = STR1; вполне корректна. Она тождественна записи char *ptr = &STR1[0];
И с другой стороны в С массивы в функции передаются как указатель на первый элемент. Так что с какой стороны ни подойди - в этом месте ошибки нет.

Сергей, этим сообщением я лишь пытался обратить внимание на ошибку в написании имен массивов при вызове функции smile.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- DeXteR   IAR и sprintf   Jul 27 2006, 16:51
|- - Сергей Борщ   Цитата(rezident @ Jul 28 2006, 12:41) Сер...   Aug 1 2006, 07:06
- - DeXteR   Цитата(rezident @ Jul 27 2006, 21:08) Пер...   Jul 27 2006, 18:14
- - vet   Возможно, дело в настройках Printf formatter (свой...   Jul 27 2006, 22:11
- - DeXteR   Цитата(rezident @ Jul 27 2006, 21:08) Пер...   Jul 28 2006, 06:47
- - KRS   Я думаю в printf лучше действительно использовать ...   Jul 28 2006, 07:11
- - DeXteR   Цитата(Сергей Борщ @ Jul 28 2006, 11:29) ...   Jul 28 2006, 08:17
- - CSB   Library Options -> Printf formatter -> Small...   Jul 28 2006, 09:09
- - UFO   to DeXteR по синтаксису все верно, все же это что-...   Jul 28 2006, 09:21
- - DeXteR   Цитата(UFO @ Jul 28 2006, 13:21) Library ...   Jul 28 2006, 09:36
- - DeXteR   Цитата(Сергей Борщ @ Aug 1 2006, 11:06) Ц...   Aug 1 2006, 07:25
- - DeXteR   Уважаемые специалисты Хочу продолжить эту тему по...   Jan 23 2007, 11:59
- - IgorKossak   Изменение хипа (кучи) в данном случае ничего не да...   Jan 23 2007, 13:34
- - DeXteR   Цитата(IgorKossak @ Jan 23 2007, 14:34) И...   Jan 23 2007, 15:14
|- - IgorKossak   Цитата(DeXteR @ Jan 23 2007, 14:14) Отлад...   Jan 23 2007, 16:18
- - IgorKossak   Собрал Ваш пример. Увеличение стека данных до 0х16...   Jan 23 2007, 16:06
- - DeXteR   Цитата(IgorKossak @ Jan 23 2007, 17:06) С...   Jan 23 2007, 16:19
- - IgorKossak   Версия 4.21а, но я думаю, что значения это не имее...   Jan 23 2007, 16:25
- - DeXteR   Цитата(IgorKossak @ Jan 23 2007, 17:25) В...   Jan 23 2007, 16:39
|- - DeXteR   Скачал 4.21а с этого сайта Скомпилировал проект Т...   Jan 23 2007, 17:14
- - IgorKossak   Может и вовсе не стОит AVRStudio юзать?   Jan 23 2007, 17:47
|- - DeXteR   Цитата(IgorKossak @ Jan 23 2007, 18:47) М...   Jan 23 2007, 18:12
|- - IgorKossak   Цитата(DeXteR @ Jan 23 2007, 17:12) Но вс...   Jan 24 2007, 16:46
- - DeXteR   Цитата(IgorKossak @ Jan 24 2007, 17:46) Ц...   Jan 24 2007, 19:11


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 07:23
Рейтинг@Mail.ru


Страница сгенерированна за 0.01699 секунд с 7
ELECTRONIX ©2004-2016