2012-02-21 3 views
5

Когда я пытаюсь запустить следующий код, я получаю ошибку seg. Я попытался запустить его через gdb, и я понимаю, что ошибка происходит как часть вызова printf, но я потерял, почему именно он не работает.Программа вылетает, когда я даю printf указатель на массив символов

#include <stdlib.h> 
#include <stdio.h> 

int main() { 
    char c[5] = "Test"; 
    char *type = NULL; 

    type = &c[0]; 
    printf("%s\n", *type); 
} 

Если я заменяю printf("%s\n", *type); с printf("%s\n", c); я получаю "Test", напечатанный, как я ожидал. Почему он не работает с указателем на массив символов?

+2

Я просто хотел бы nitpick: «C» не разбился, потому что C не является программой. Ваш компилятор не сработал. *** Вы использовали C, чтобы написать программу, которая сработает. *** –

+1

Вы правы Дэвид. Я знаю, что я хотел сказать, и так вы, очевидно, но важно быть точным, когда обсуждаете подобные вещи. – WhiteHotLoveTiger

+0

Измените свой '% s' на'% c', чтобы увидеть 'c [0]' – wulfgarpro

ответ

15

Вы проходите мимо простой char и printf пытается разыменовать его. Попробуйте вместо этого:

printf("%s\n", type); 
      ^

Если вы передаете *type это походит на сообщение printf «У меня есть строка в месте Т».

Также type = &c[0] является своего рода вводящим в заблуждение. Почему вы не просто:

type = c; 
+0

Спасибо за четкое объяснение. Просто, когда я подумал, что получаю завивки указателей, я понимаю, что мне нужно их немного пересмотреть. – WhiteHotLoveTiger

5

Не разыменовать type. Он должен оставаться указателем.

4

Удалить извещения о замене type в вашем printf.

Смежные вопросы