簡體   English   中英

在C ++中傳遞字符數組

[英]Passing character arrays in C++

在傳遞用於通過其地址引用字符串的字符指針(即直接通過其名稱或&name[0] )時,必須傳遞原始字符串,因為我們通過地址進行傳遞。

但是,在執行以下代碼后,我為第一個元素獲得了兩個不同的address值,令人驚訝的是,它們之間相隔2個字節。

另外,在函數中修改字符串的內容並沒有更改傳遞的數組的內容,但這是因為新的字符串會生成新的地址,對嗎?

但是,關於第一個元素的地址不同,那怎么可能呢?

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

void fn(char *arr)
{
    cout<<endl<<&arr;
    arr="hi";
}

void main()
{
    clrscr();
    char *arr="hey";
    cout<<endl<<"main "<<&arr;//the address is different from that in fn
    fn(arr);
    cout<<endl<<arr;
}

您要通過value傳遞一個指針 ,然后比較指針和副本的地址,這當然是不同的。 如果要檢查它們是否指向相同的內存地址,可以執行以下操作:

std::cout << (void*)arr << std::endl;

修改函數中字符串的內容,未更改傳遞的數組的內容

您不是在修改字符串的內容,而是在重新分配指針的副本以指向不同的字符串文字。 還要注意,修改指向的內存(文字)將是未定義的行為。

編譯器允許代碼通過(即編譯它)的唯一原因是具有向后兼容功能,該功能使您可以擁有一個char* ,該char*指向字符串(即const char[]類型)的內容。 您應該有一個警告,應該避免這樣做。

僅供參考。 我無法評論有關傳遞字符數組的類似問題,因為它已作為重復項關閉,但是該問題相當重要,因此希望您不必介意我是否交叉發布。

在生產應用程序中使用字符串時,通常會使用UTF-8,因為它無需花費很多精力即可大大增加市場。

http://www.joelonsoftware.com/articles/Unicode.html

大多數應用程序還使用字符串類來封裝字符。 然后,您可以使用類似:

無效fn(...,const std :: string&static_string,...);

在您的標題中。 如果使用類似gettext的庫,則代碼如下所示:

printf(gettext(“突然之間有一行是好的..”));

英文字符串是本地化文件的直觀索引,您可以在安裝或運行時快速輕松地切換語言。

如果由於使用C而不能使用類,則gettext文檔也將涉及這種情況。

暫無
暫無

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

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