c,c 可以修改char型別值嗎

2022-02-10 02:44:47 字數 6092 閱讀 6601

1樓:匿名使用者

原因:char *p="hello「;

*(p+2)='w';

這裡的p是一個指向常量字串的指標

他可以相當與:const char *p="hello"

根據定義:指向常量字串的指標不能更改指標指向的內容,但是可以改變本身的值,既是執行*(p+2)='w'; (錯誤) p="bcvcbvv"《正確》

char pp = "hello";

這個相當與指標常量,就是本身是個常量《因為pp就是陣列的一個引用,引用本身就是指標常量》

相當與 char const *pp="hello";

根據定義:指標常量不能改變本聲的值,但是可以改變指向的值既是 *(pp+2)='w'(準確) pp="mnbmbmb"(錯誤)

2樓:

不能修改!

關鍵問題是:

char *p="hello「;

以這種方法初始化的字串是常量字串,所以不能修改。

char p="hello「;

這是變數,可以修改!

char *p=new char[6];

p="hello「;

這也是變數,可以修改!

3樓:福岑

不能修改!

char *p="hello";

相當於 const char *p="hello"

以這種方法初始化的字串是常量字串,而系統預設對常量賦初值後,其值無法被修改,否則會報錯,所以不能修改。

4樓:匿名使用者

在我機器run時報錯了.

因為char *p="hello「;表示系統先將"hello"看成常量字串,再將常量字串的地址賦給p.

那麼p是指向常量,是不可修改的.所以*(p+2)='w'不能起作用.如果是下面的就行了:

char c = "hello";

char *p = c;

*(p+2)='w';

這樣像能修改了!

5樓:匿名使用者

因為p指向了一個常量字串,所以你對p操作相當於對常量字串操作改成這樣就可以了:

char pp = "hello";

char *p = pp;//指向變數

*(p+2) = 'w';

這樣輸出的p就改變了

c/c++中,char **其實是什麼型別?

6樓:

c/c++中關於指標型別的闡述很明白:指標的型別是指指標指向的目標的型別。所以char **就是一個「字元型二級指標」或「二級字元型指標」。

7樓:匿名使用者

char 是 字元型別的 啊 。

8樓:匿名使用者

是一個二級指標。就是指標的指標。

在c++中如何將int轉換成char*型別?

9樓:文件類共創空間

itoa( int value, char *string, int radix );

第一個引數:你要轉化的int;

第二個引數:轉化後的char*;

第三個引數:你要轉化的進位制;

sample;

int n = 12;

char c[20];

itoa( n, c, 2 );

itoa( n, c, 10);

itoa( n, c, 16);

c的值分別為, 11000, 12, c;

10樓:

// 在 c++ 裡把其它型別轉換成字串時最好是用純 c++ 的機制: stringstream 類。

// stringstream 的 str 方法返回 string;string 的 c_str 方法則返回 c 字串。

// 應當一提的是,在 c++ 裡,應該儘量避免用 c 字串而改用 c++ 字串(string)。

11樓:

有個itoa函式

但是不好用,很多編譯器不支援

下面這個是我自己寫的,不是很好,基本能用

char s[100];

char *pc;

void atoi(int a)

while(--i)

pc++=s[i];}

12樓:

用sprintf()函式。

例如:char acbuf[20] = ;

int i = 100;

sprintf(acbuf, "%d", i);

13樓:西延凌風

如果是cout可以使用強制轉換

c語言怎麼設定函式返回值為char*字串型別?

14樓:匿名使用者

把函式的返回值的型別設定為char型別的指標就可以了。

例如:char* multmatrix( )例項:#include

using namespace std;

char* multmatrix( )

int main()

執行結果:

a bc da bc d

15樓:悶聲發大才

老大,你**寫得有問題,首先你先確定是字串指標,而不是指標陣列char *p[127];

char *str[127];

這兩行都有問內題

char* getstring(char *str)int main()

16樓:匿名使用者

char *x[127];

修改為 char x[127];

char *p[127];

char *str[127];

修改為char p[127];

char str[127];

c++如何將string 轉換為char*

17樓:親親親親的哦

1、如果要將string轉換為char*,可以使用string提供的函式c_str() ,或是函式data(),data除了返回字串內容外,不附加結束符'\0',而c_str()返回一個以『\0』結尾的字元陣列。

2、const char *c_str();

c_str()函式返回一個指向正規c字串的指標,內容與本string串相同.

這是為了與c語言相容,在c語言中沒有string型別,故必須通過string類物件的成員函式c_str()把string 物件轉換成c中的字串樣式.

注意:一定要使用strcpy()函式 等來操作方法c_str()返回的指標

比如:最好不要這樣:

char* c;

string s="1234";

c = s.c_str(); //c最後指向的內容是垃圾,因為s物件被析構,其內容被處理

應該這樣用:

char c[20];

string s="1234";

strcpy(c,s.c_str());

這樣才不會出錯,c_str()返回的是一個臨時指標,不能對其進行操作

再舉個例子:

c_str() 以 char* 形式傳回 string 內含字串

如果一個函式要求char*引數,可以使用c_str()方法:

string s = "hello world!";

printf("%s",s.c_str()); //輸出 "hello world!"

拓展資料:

1.c++是c語言的繼承,它既可以進行c語言的過程化程式設計,又可以進行以抽象資料型別為特點的基於物件的程式設計,還可以進行以繼承和多型為特點的物件導向的程式設計。c++擅長物件導向程式設計的同時,還可以進行基於過程的程式設計,因而c++就適應的問題規模而論,大小由之。

2.c++不僅擁有計算機高效執行的實用性特徵,同時還致力於提高大規模程式的程式設計質量與程式設計語言的問題描述能力。

3.string 是c++中的字串。 字串物件是一種特殊型別的容器,專門設計來操作的字元序列。

4.不像傳統的c-strings,只是在陣列中的一個字元序列,我們稱之為字元陣列,而c + +字串物件屬於一個類,這個類有很多內建的特點,在操作方式,更直觀,另外還有很多有用的成員函式。 string 的定義為:

typedef basic_stringstring;

5.char是c/c++整型資料中比較古怪的一個,其它的如int/long/short等不指定signed/unsigned時都預設是signed,但char在標準中是unsigned,編譯器可以實現為帶符號的,也可以實現為不帶符號的,有些編譯器如psos的編譯器,還可以通過編譯開關來指定它是有符號數還是無符號數。

18樓:匿名使用者

char* p=new char[a.size()];

strcpy(p,a.data());

delete p;

不能通過a.data()和a.c_str()返回的指標修改string的內容,但像上面拷貝一份內容就可以

19樓:匿名使用者

1.直接在構造string時建立。

char data = ;

string str = new string(data);

2.string有方法可以直接轉換。

string.valueof(char chr)就可以。

如: char cha = ;

string n = string.valueof(cha);

public class test}

20樓:匿名使用者

1、const char *p = a.data();

2、const char *p = a.c_str();

3、char *p = const_cast(a.c_str());

21樓:篤俠

a.c_str()就是char*型別了。

22樓:好名字可以讓你的朋友更容易記住你呦

好像沒有轉換成char* 啊,我試了一下 不給力啊

c,c++中關於char* 以及 char陣列的問題

23樓:veket的小號

1.因為 iostream內部 cin cout 對char* 做了特殊處理.......因為c/c++ 輸入輸出字串通常要用到char*

如果直接輸出地址,就要用別的方法來輸出字串了 就不方便了.....所以直接輸出地址 那裡放著的字串......

3、sizeof("hello");得到 字串實際長度 + \0 佔的一個位元組

一般用strlen函式.......

同 1、2,str陣列名 是 char* 地址

24樓:愛問西瓜愛答樹

pstr是指標,*pstr,取地址的內容。顯示什麼,這個取決於cout用哪個函式,由引數型別決定。想輸出字串的地址用char str2="123abc";

2.arr是陣列,是首地址。int * ,表示指向的地址空間是int 4位元組的,char *當然是char 1位元組的。

3.sizeof("hello");

4.cout有個對字串輸出的過載,全部輸出,遇到'\0'結束。

25樓:匿名使用者

運算子過載可以做任何事情,沒有任何規則所只要是地址列印出就是地址。而且char*是特殊的,從來沒有在哪輸出過地址

運算子過載,不是int/char不同,而是過載後int*和char*不同

sizeof("hello"),這是唯一的辦法,賦值給指標後只能用strlen,不能用sizeof

同樣,不要總想著引數是地址,輸出也是地址,如果這樣,高階語言就太無用了

CC霜可以直接塗嗎?CC霜需要卸妝嗎

cc霜使用前需要先護膚,同時需要卸妝。cc霜屬於粉底的一種,如不乾淨卸妝,也有可能導致堵塞毛孔。可以用卸妝水卸妝 將臉部用洗面奶清潔完後,把卸妝水倒入在化妝棉上,然後把臉部的位置擦拭乾淨。用乾淨的溼巾紙逆向向上擦拭 如果紙巾乾淨,代表已經卸妝乾淨。首先,要進行基本的護理,採用洗面奶做好臉部和頸部的清...

c中有string資料型別嗎,cc中有string資料型別嗎

c語言中沒有string型別,字串是用字元陣列實現的 c 中有string類,可以定義string物件,並對其進行處理。標準c 中是用什麼資料型別來表示字串的?string型別是在c 的標準庫裡封裝了的,只需要 include 就可以了 string是c 庫裡的東西,是標準的。string不是cha...

王者榮耀實名認證後可以修改嗎?可以申訴嗎

王者榮耀有的玩家應該發現自己賬號已經實名認證過了,但是認證的不是自己的身份證,不幸的是現在實名認證資訊是不可以更改的,你之前如果填的就是已成年身份證的話就會一直儲存了,如果你是填的未成年身份證,那麼等18歲會自動移除防沉迷,還是不能更改身份證的 認證後就改不了王者榮耀正式推出實名制,未成年玩家收益受...