簡體   English   中英

Char x [50]和Char x [100]輸出

[英]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.

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