簡體   English   中英

用字符串文字初始化的字符數組和使用strcpy的字符數組之間的區別

[英]difference between character array initialized with string literal and one using strcpy

請幫助我了解使用諸如char line[80]="1:2"這樣的初始化字符數組(不起作用!!)並使用char line[80]后跟strcpy(line,"1:2")
根據我對第一種情況的理解,我有一個charachter數組,它已分配了內存,並且我正在向其中復制字符串文字。 在第二種情況下也是如此。 但是顯然我錯了。 所以我的理解有什么問題。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void tokenize(char* line)
{
   char* cmd = strtok(line,":");

    while (cmd != NULL)
    {
    printf ("%s\n",cmd);
    cmd = strtok(NULL, ":");
    } 
}

int main(){
char line[80]; //char line[80]="1:2" won't work 
/*
char *line;
line = malloc(80*sizeof(char));
strcpy(line,"1:2");
*/
strcpy(line,"1:2");
tokenize(line);
return 0;
}

你錯了。 這兩個代碼段的結果

char line[80] = "1:2";

char line[80];
strcpy( line, "1:2" );

是一樣的 那就是這句話

char line[80] = "1:2";

確實有效。:)只有一個區別。 當使用字符串文字初始化數組時,所有不具有字符串文字相應初始化字符的數組元素都將以'\\0'進行初始化,即它們將被零初始化。 當使用函數strcpy時,未被字符串文字的字符覆蓋的數組元素將具有未確定的值。

數組由字符串文字(除了其“ tail”的零初始化除外)初始化,就像應用了函數strcpy

這些語句之間存在精確的結果等價關系

char line[80] = "1:2";

char line[80];
strncpy( line, "1:2", sizeof( line ) );

也就是說,當您使用函數strncpy並指定目標數組的大小時。

如果您是要傳遞給函數直接將字符串文字tokenize為函數的參數,則該程序具有未定義的行為,因為您不能更改字符串文字。

根據C標准(6.4.5字符串文字)

7不確定這些數組是否是唯一的,只要它們的元素具有適當的值即可。 如果程序嘗試修改這樣的數組,則行為是不確定的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM