2012-03-06 42 views
0

我有這兩個指針,阿門PTR,所有的i值分配給阿門也將被分配到PTR這兩個指針別名是怎麼樣的?

Can ptr and amen be aliases?

void func(const char *ptr) 
{ 
    struct samp *test; 
    DIR *dp; 
    char *amen; 
    if(ptr[0]=='c'||ptr[0]=='C') 
    strcpy(amen,"c_amen.txt"); 
    else if() 
    ...... 
    else 
    ... 
} 

所以如果FUNC稱爲FUNC( 「C」);PTR將有相同谷爲阿門線後立即4.

另外,什麼是常量呢?不應該是爲了保護ptr不被更改內部func

+3

segfault alert at line'strcpy(amen,「c_amen.txt」);' – MByD 2012-03-06 20:00:09

回答

1

目前,你不能對行爲的任何假設,以下行不正確:

char *amen; 
// ... 
strcpy(amen,"c_amen.txt"); 

你傳遞一個未初始化的指針strcpy,所以你需要修復(它預期的目標指針有效和適當的大小來保存複製的字符串)。

修復之後,是的,amen會指向一個內容相同的字符串。當然,在函數調用結束後它將被清除,所以不是很有用。您需要傳遞字符串的大小或致電ptr撥打strlen來計算分配緩衝區的大小。

const在這種情況下意味着你​​不能改變指針指向的內容,即數據是隻讀的。指針本身不是const。