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
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.