2015-01-06 13 views
-1

我想創建我自己的數據類型的字符串,有誰能告訴我我在做什麼typedef和初始化錯誤。探索'typedef'來創建一個有限的字符串數據類型?

#include<stdio.h> 
#include<conio.h> 

typedef char string[10]; 


int main(){ 


    string myName; 

    myName = "Tayyab"; 

    printf("This is %s", myName); 



    getch(); 
} 
+0

我知道我們可以通過包含一個頭文件string.h來聲明字符串。 – titanscomputer

+1

在C中沒有類型字符串。通過包含'string.h',你可以添加一些處理空終止字符串的函數的聲明。 – bolov

+0

This -1是因爲我是初學者???這是專業人士的唯一場所嗎? – titanscomputer

回答

0

我在C語言中實際做的是不允許的。首先我要定義一個string[10]的字符數組,然後在下一個語句中爲它分配一個字符串值,它只有在我同時分配並初始化字符數組時纔有可能。

所以在其他情況下,我必須逐個分配每個字符,或者我可以使用strcpy()將字符串值複製到我的字符數組中。

3

您不能分配到一個數組,但你可以將其初始化:

string myName = "Tayyab"; 
1

您是typedef荷蘭國際集團的char一個數組,你不能分配給它,但是你可以字符複製到它或分配到單個元件,例如

myName[0] = 'T'; 
myName[1] = 'a'; 
myName[2] = 'y'; 
myName[3] = 'y'; 
myName[4] = 'a'; 
myName[5] = 'b'; 
myName[6] = '\0' /* <- you should add a null terminator (c style strings) */; 

strncpy(myName, "Tayyab", sizeof(myName)); 

但要小心第二種情況可能省略null終止'\0'如果它不存在於源字符串中。

當然,您可以使用初始化語法,如ouah建議。

+1

第二種情況下,如果strlen(「Tayyab」)> = sizeof(myName)' – chux

+0

也省略終止空字符'\ 0'在第二種情況下,它已經省略了空終止符我認爲。我是否必須以這種方式編寫第二個案例「Tayyab \ 0」以避免省略空終止符? – titanscomputer

+1

不,這在你寫'Tayyab'時已經暗示了,我已經看到了很多,但並不需要。 Chux註釋是針對這種情況,源字符串的長度超過了目標緩衝區的長度,在這種情況下,空字節不會被'strncpy'添加,所以可以確定,你可以像'myName [sizeof( myName) - 1] ='\ 0';'緊跟在'strncpy'之後。 –

1

如果刪除typedef以怎樣的typedef應該代表取代其使用情況,您main函數變爲:

int main(){ 

    char myName[10]; 

    myName = "Tayyab"; 

    printf("This is %s", myName); 

    getch(); 
} 

如果你知道爲什麼線

myName = "Tayyab"; 

是錯誤的這個版本,你知道你的問題的答案。

+0

我知道,我只是在探索。 – titanscomputer

相關問題