2010-09-24 50 views
2

嘿人們好心告訴我,如果以下聲明是正確的?typedef問題

如果是則親切地解釋

typedef char HELLO[5]; 

HELLO name; 

現在是什麼數據類型是叫什麼名字? [如字符,整型等]

我才知道,名稱將是一個字符串數組,但是當我運行下面的程序,我得到錯誤

#include<stdio.h> 

typedef char HELLO[5]; 

void main() 
{ 
    HELLO name; 
    name="hey"; 
    printf("%s",name); 
} 

錯誤:不兼容的類型分配給鍵入時'HELLO'from type'char *'

回答

3

你的問題與typedef無關。您的類型是一個字符數組,也稱爲c樣式字符串或用於您的用法的空字符串。

您需要使用strcpy或更好的strncpy才能將字符串複製到char數組中。 否則,您可以使用char*類型,您可以獲取存儲的字符串文字的地址,然後可以打印它。

i came to know that name will be an array of strings but when i run the following programme

正確的術語將是一個字符或緩衝區的數組。一串字符串可能會被混淆成一個數組字符的數組。

+0

是啊...我的錯誤.. – Kraken 2010-09-24 19:41:40

+0

thnx ................... – Kraken 2010-09-24 19:42:26

+0

你不想使用'strncpy',它不會做什麼你認爲它的確如此。 – schot 2010-09-25 05:47:29

2

namechar[5]的類型 - 5個字符的數組。

定義name這樣

typedef char HELLO[5]; 

HELLO name; 

相當於定義:

char name[5]; 

你不能在C字符串字面量分配給一個字符數組,因爲在你的榜樣。 您必須將文字中的字符複製到數組中。您可以使用strncpy()

strncpy(name, "hey", 4); // strlen("hey") == 3. 4 passed to strncpy, as the last 
         // argument causes it to add a null character at the end