2012-04-09 54 views
1

我知道什麼是指針,但是當涉及到字符串/數組時,我非常困惑。如果有人有答案或網站解釋它會很好。例如:爲什麼字符串有返回類型的指針?

char * strncopy (char*dest, char * source, size_t); 

爲什麼指針?它指向什麼?它是否通常存儲指針?

在我的教科書中說每個字符串構建函數都是類型指針char *。

此外,我想看看我是否可以寫一個程序來清除事情,但它沒有奏效。有人能告訴我如何解決它,或者我做錯了什麼。

#include <stdio.h> 
#include <string.h>  

char * getname() 
{ 
    char name [10]; 
    scanf ("%s", name); 
    return (name); 
}  

int main (void) 
{ 
    char name[10]; 
    printf ("Enter your name\n"); 
    name[] = getname(); 
    printf ("Hi %s", name); 
    return (0); 
} 
+0

供將來參考:如果您在Google中鍵入「man strncpy」,它會立即將您發送到回答您問題的網站。 – gnasher729 2014-06-21 07:46:14

回答

1

裏面你的getName功能,當您返回一個指針數組名,因爲它是它也被打爛你留下一個無效的指針在棧上分配。解引用這樣一個指針會導致許多問題。

您應該在堆中使用malloc/calloc分配getname中的name數組,以便在返回指針時數據不會被銷燬。

關於像strncpy這樣的函數,它們傾向於返回一個指向結果字符串的指針;例如:strncpy返回一個指向目標的指針。

0

指針本身表示一個地址,例如,如果您鍵入char *pstr指針,可以隨時查詢與printf("address of my pointer %p\n", pstr);

在C語言編程的基本地址,一個字符串是char數組。如果你對數組及其內存佈局有很好的瞭解,那麼你就不難理解c風格的字符串。一般來說,C中的一個數組是一個連續的內存塊,其中數組的名稱表示數組中第一個元素的地址。所以字符串是第一個字符的數組地址的名稱爲char陣列地址的內存塊。另外,c風格的字符串以字符\0終止,所以如果你想自己管理字符串的內存,記住一個額外的字節爲\0

至於你的第二個問題,函數getname中的你的name是一個局部變量,當函數返回時它的生命期結束。但是,您仍然希望在不合適的功能之外訪問name。你可以像dasblinkenlight和其他人的帖子中解決這個動態分配的內存。

祝你好運。

相關問題