2012-02-21 36 views
5

Khi tôi cố gắng chạy đoạn mã sau, tôi nhận được lỗi seg. Tôi đã thử chạy nó thông qua gdb, và tôi hiểu rằng lỗi đang xảy ra như một phần của gọi printf, nhưng tôi bị mất là tại sao chính xác nó không hoạt động.Chương trình bị treo khi tôi cho printf một con trỏ tới mảng char

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

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

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

Nếu tôi thay printf("%s\n", *type); với printf("%s\n", c); tôi nhận được "thử nghiệm" in như tôi mong đợi. Tại sao nó không hoạt động với một con trỏ đến mảng char?

+2

Tôi chỉ muốn nitpick: "C" không bị lỗi vì C không phải là chương trình. Trình biên dịch của bạn không bị lỗi. *** Bạn đã sử dụng C để viết chương trình bị treo. *** –

+1

Bạn đúng là David. Tôi biết những gì tôi muốn nói, và như vậy bạn, rõ ràng, nhưng điều quan trọng là phải chính xác khi thảo luận về những thứ này. – WhiteHotLoveTiger

+0

Thay đổi '% s' thành'% c' để xem 'c [0]' – wulfgarpro

Trả lời

15

Bạn đang chuyển một đồng bằng charprintf đang cố gắng coi trọng nó. Hãy thử điều này thay vì:

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

Nếu bạn vượt qua *type nó giống như nói printf "Tôi đã có một chuỗi tại vị trí T".

Ngoài ra type = &c[0] là loại gây hiểu nhầm. Tại sao bạn không chỉ:

type = c; 
+0

Cảm ơn lời giải thích rõ ràng. Ngay khi tôi nghĩ rằng tôi đã nhận được hang của con trỏ, tôi nhận ra rằng tôi cần phải xem xét chúng nhiều hơn một chút. – WhiteHotLoveTiger

5

Đừng dereference type. Nó phải là một con trỏ.

4

Xóa cuộc hội thảo của type trong số printf.

Các vấn đề liên quan