2014-11-03 96 views
-1

我剛剛開始學習C,並且對如何將字符串寫入C中的簡單字符數組感到困惑。我明白C沒有字符串數據類型,並且我讀到大多數網站在這樣一個將字符串寫入初始化空白字符數組

char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'}; 
char greeting[] = "Hello"; 

但是如果我有初始化

char greeting[50]; 

一個字符數組聲明字符串,我嘗試給它一個字符串值。

char greeting[50]; 
greeting = "Zack"; 

我給了一個錯誤,爲什麼?

+0

在C中,數組是一個const引用。你不能改變它們。 – KodingKid 2014-11-03 13:07:11

回答

2

strcpy旨在複製「字符串」。 使用方法如下:

char greeting[50]; 
strcpy(greeting, "Zack"); 

注意潛在的超支如果目標不夠大。

1

您使用strcpy()

char greeting[50]; 

strcpy(greeting, "Zack"); 

這四個大字,並終止零到greeting複製。

請注意,它對greeting的可用空間一無所知,所以完全可以做錯誤的事情。

1

你得到一個錯誤,因爲你基本上試圖給數組分配一個字符串常量。數組greeting衰減到一個指針,但它是一個char *const指針。

您需要使用strcpy來複制文字。

2

使用標準功能strcpy在頭<string.h>宣稱複製的字符串中的字符陣列

#include <string.h> 

//... 

char greeting[50]; 
strcpy(greeting, "Zack"); 

有在頭<string.h>也可用於在字符數組複製字符串聲明其他功能。例如

memcpy 
strncpy 
strcat 
strncat 

使用strcat代替strcpy

#include <string.h> 

//... 

char greeting[50]; 

greeting[0] = '\0'; 
strcat(greeting, "Zack"); 

陣列的例子有沒有賦值運算符。所以編譯器會發出此代碼中的錯誤片斷

char greeting[50]; 
greeting = "Zack"; 

但是,當你可以指定字符數組的一招。要做到這一點,你需要在一個結構中包含一個字符數組,並使用複合文字。例如。與數組相反,結構具有賦值運算符,該運算符執行成員級結構的副本。

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

int main(void) 
{ 
    struct A { char greeting[50]; } s; 
    s = (struct A) { "Zack" }; 

    puts(s.greeting); 

    return 0; 
} 

輸出將是

Zack 

,該代碼會被編譯,你需要一個支持C99編譯器。

1

在C中,如下因素代碼將打印「foo」的:

char greeting[50]; 
if(greeting == &greeting[0]){ 
    printf("foo"); 
} 
else{ 
    printf("bar"); 
} 

這是因爲該陣列的(問候)可變包含一個指向它的第一個元素(問候[0 ])。

所以,如果你ASIGN:你是說

greeting = "Zack"; 

:讓問候有其中的文本字符串「扎克」是在內存中的地址。

由於不允許更改數組地址,因此會出現錯誤。

+0

這就是爲什麼你必須遵循@doctorlove答案才能完成這項任務 – user3204469 2014-11-03 13:18:21

+0

@ user3204469數組包含指向其第一個元素的指針是錯誤的。 – 2014-11-03 13:33:27

+0

@Baldrickk,我明白這個問題是:「爲什麼這個陳述是錯誤的?」不是「如何將字符串複製到數組?」。對不起,我的誤解。 – user3204469 2014-11-03 13:58:34