LINUX.ORG.RU

Ламерский вопрос по С


0

0
Народ! обьясните почему не работает след прога - компиляция без warning - а при выполнении - segmentation fault #include <stdio.h> main () { void test(char *); char *trace = "ssssssssssssssssssss" ; test(trace); printf ("%s\n", trace); return 0; } void test(char *a) { *a = 'A'; } Что делаю не правильно? Хочу в строке trace в качестве первого символа поставить букву "A".
anonymous
Поменяй 
char *trace = "ssssssssssssssssssss";
на 
char trace[] = "ssssssssssssssssssss";

А лучше -- вообще так не делай :))
asd
()
Строку нулем закончи
anonymous
()
Каким ещё нулём? Всё правильно asd написал.
justme
()
Это я кто задал вопрос. Пасибо asd, все заработало - но главного я так и не понял - в чем же отличие между char a [] и char *aPtr ? Почему же работает след. вариант: #include <stdio.h> main() { char *aPtr = "my_string"; char a [] = "my_string"; printf ("%s\n", a); printf ("%s\n", aPtr); return 0; } ~
anonymous
()
Это опять я кто задал вопрос. Всем пасибо - понятно - в какой-то книженке нашел: " Если переменная типа char* инициализируется строковым литералом, то НЕКОТОРЫЕ КОМПИЛЯТОРЫ могут поместить эту строку в **НЕИЗМЕНЯЕМУЮ** область памяти."
anonymous
()
"в чем же отличие между char a [] и char *aPtr":
отличий почти нет.
abc[1] это есть *(abc+1) где abc - поинтер (pointer).
abc[n] есть *(abc+n)....
короче адресс + смещение есть массив.
logIN
()
Ответ на: комментарий от logIN
Отличие в сообщении от:
anonymous (*) (2001-05-30 09:56:45.0)
asd
()
Мне кажется, что нужно передавать указатель на указатель. Иначе *переданная_строка будет указывать на какой-то байт в стеке текущей процедуры и соотв. будет ерор
Banshee
()
То есть другими словами, переменная aPtr будет локальной
Banshee
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.