[英]Char x[50] and Char x[100] Output
我不習慣C語言,因為我主要是Java人士,對C ++有所了解,所以如果這是一個瑣碎的問題,請原諒我。 在線搜索時,我似乎找不到答案。
我正在初始化一個char數組...
char tcp[50];
這樣我就可以連接一個const char和一個char。 在示例中,我看到一個簡單的方法是創建一個空的char數組,然后使用...
strcat(x,y);
將它們粘在一起。
問題是,當將空白字符數組設置為“ 50”時,將其打印出來會給我以下結果:
X??|?
當我將其更改為...
char tcp[100];
並打印它的空白。 為什么是這樣?
假設數組是本地(自動)數組,則數組內容未定義。
采用:
char tcp[50] = "";
要么:
char tcp[50] = {0};
要么:
char tcp[50];
tcp[0] = 0;
要么:
char tcp[50];
memset(tcp, 0, sizeof(tcp));
隨你心意。
在執行任何操作之前,始終將null終止您的char數組:
tcp[0] = '\0';
C為您聲明的數組愉快地分配了空間,但是沒有將其內容設置為0。
因此,您要打印的數組的內容是隨機的(或者取決於內存的先前內容)
創建數組時,編譯器會將其放在內存中的某個位置,但不會對其進行初始化,因此,程序啟動時該內存中的內容將是初始的“字符串”。
創建數組后,可以手動終止字符串,方法是將整個數組“置零”,或者只是將零作為第一個字符:
char tcp[50] = { '\0' };
要么
char tcp[50];
/* ... */
tcp[0] = '\0';
區別在於,您實際上是在使用兩個空數組,試圖將它們合並到一個的內存空間中(不確定是否對您有意義)。
首先,在C中,您必須以\\0
終止字符串。 這是Java中未公開或看不到的東西。 另外,您實際上使用了兩個未定義的字符串(因為沒有設置值)。
#include <stdio.h>
#include <string.h>
char target[256];
const char source_a[] = "Hello";
const char source_b[] = "World!";
int void(main)
{
target[0] = '\0'; // this essentially empties the string as we set the first entry to be the end. Depending on your language version of C, you might as well write "char target[256] = {'\0'};" above.
strcat(target, source_a); // append the first string/char array
strcat(target, " "); // append a const string literal
strcat(target, source_b); // append the second string
printf("%s\n", target);
return 0;
}
重要提示:可以不保存使用strcat()
,因為不執行任何長度檢查,除了Java以外,這些“字符串”具有固定的長度(定義變量時設置的長度)。 如果沒有給出長度,但是您在初始化時復制了一個字符串,則會采用該長度(例如char test[] = "Hello!";
將為7個字符長(由於終止\\0
))。
如果您希望對字符串使用更像Java的方法,請使用C ++和std::string
類,該類的執行與Java的字符串更相似。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.