c程式輸出字串變數時為什麼會出錯直接輸出

2022-02-24 20:46:04 字數 4844 閱讀 1103

1樓:匿名使用者

因為沒有加#include ,對string過載輸出流不被支援。以下兩者任選一種方式解決:

1.加上#include ;

2.把**按如下方式來改寫:

#include

#include

#include

using namespace std;

void main()

兩種方式都可以,隨便選一種。

2樓:曉晨之巔

因為你定義字串變數的型別string必須要包含庫檔案string,即加入#include 即可。

3樓:匿名使用者

#include

#include

#include

using namespace std;

int main()

我用的g++編譯。將void更改為int,並新增return 0;編譯執行通過。

4樓:匿名使用者

要使用string類,要先用#include把string標頭檔案包含進來。閣下的定義的字串變數

string a="asdfgh"; 的資料型別string型別;

5樓:匿名使用者

顯示字串常量:cout << "asdfgh";

顯示字串變數指標:cout << a;

顯示字串變數內容:cout << *a;

6樓:匿名使用者

輸出修改成這句

cout << a.data() << endl;

就可以了

7樓:來自修武

新增,因為在string中過載了輸出符號<<

8樓:匿名使用者

要加.h但是現在最好不要加了

9樓:

#include

#include

using namespace std;

void main()

10樓:侯家瑋

加上#include就好了。

11樓:匿名使用者

加上標頭檔案 #include問題就解決了。。

12樓:

main前面的void改成int

13樓:ylf塵風

這個程式裡面沒有輸出啊!你把源程式發過來咯

14樓:匿名使用者

出什麼錯?測試沒有問題啊

c++中定義char name[20]後,為什麼用printf("%s",name)就能輸出一連串字串?

15樓:匿名使用者

%s代表bai字串,name是字元陣列

的首地址du,也就是字串zhi的首地址。dao所以直接專輸出字串。

c++中定義屬char型陣列即是定義c風格字串。

格式化輸出函式printf第一個引數中%s代表可變引數部分中對應位置變數為指向字串地址的指標。

在c/c++中陣列的名是儲存該陣列首地址的常量。

需要注意:

(1)c++中定義內建型別區域性陣列變數,不提供預設初始化。這裡char是內建型別,如果不初始化其中儲存的是記憶體中的隨機數。

(2)c++不會對陣列進行越界檢查,而是將越界交給os,如果os檢測記憶體不可讀或寫,對齊進行讀寫os核心會丟擲中斷異常。

(3)c++中c-style字串讓然是以'\0'空字元為結束標誌。printf中的%s仍然會在輸出的時候從name指定的記憶體位置開始讀取資料再交給現存快取以在顯示器上顯示。不初始化或不以'\0'結尾的字串將輸出亂碼,這是如果越界讀取到了不可讀的記憶體,將會報段錯誤(unix核心)或記憶體不可讀(windows)異常以終端程式。

16樓:

%s的概念 就是輸出字串

字串必須要以'\0'結尾

也就是如果你

的name[20]中有一個位置是'\0'的話專printf("%s",name)就能正確輸出如果你是這樣屬char name[20]=;由於name陣列中沒有'\0'你對name指標用printf函式就會出錯

17樓:匿名使用者

%s是從起始位置輸出字元直到遇到\0為止,合法,

陣列在函式中做實參時會轉成指標。

18樓:匿名使用者

1,%s 是輸出字串;%c,只輸出單個字元。

2, 定義name是陣列,name表示陣列的第一個字元的地址

19樓:匿名使用者

陣列傳遞給printf函式當引數時,自動退化成指標,printf函式輸出指標指向空間,預設到'\0',結束,所以合法

20樓:wang非在心上

這個復就不需問為什麼啦!!因製為這是它的功能bai啦!!就像1+1為什麼等於du2了。你只需要zhi記住它的作用就是dao 用來輸出資料的!!

那個%s是格式識別符號啦!!就是規定後面的引數是以怎樣的格式輸出的!!另外還有其他幾種常用格式識別符號,%c、%d、%o

21樓:匿名使用者

printf函式本來就是c中的函式 。。

c++指標輸出字串前面為什麼沒有*

22樓:匿名使用者

這可能是c++發明者當初認為字元指標使用比較頻繁給它的特權吧,呵呵,其實沒有必要知道為什麼,知道怎麼用就可以,這種情況只有字串指標是特例

23樓:

char *a[2]=;

宣告裡的星號,表示a是指標,*a[2]表示a是指標陣列,陣列有兩個元素.

printf("%s \n %s",*a[1],*a[2]); -- 語法錯。

應當寫成:

printf("%s \n %s", a[0],a[1]);

%s -- 錯, 要用小寫 s

a[2] -- 下標超界,宣告2個指標,只能用 a[0],a[1];

printf %s 引數 a[0],a[1] 是兩個輸出字串的首地址。寫成 *a[1],*a[2] 就不知道是什麼了。

printf %c 引數 可以是 *a[0], *a[1],表示按ascii值列印單個ascii字元

printf("%c \n %c", *a[0], *a[1]);

24樓:匿名使用者

汗了,顯然不應該加上*的

舉個例子

char *s="abcd";

下面要輸出s

printf("%s ",?);

?的地方應該寫的是s,而不是*s;

字串即陣列,陣列即指標

換言之,s本質上是個指向字串"abcd"首地址的指標想要輸出整個字串,只要給格式符號匹配一個首地址的指標就好了,就是這裡的s

其實,*s的值是字元'a',也就是該字串第一個字元原因就是上面說的,s指向首地址,也就是a的地址,*s當然就是'a'了~

25樓:匿名使用者

"%s" 後面跟的是 char*型變數

c++輸出字串時出錯

26樓:浪子惟安

把toname方法改為

scanf("%s",&name[0]);

因為c++的string並不是和char*同樣的結構而且沒有返回值(你寫的返回值是string,嚴格的編譯器在這裡會報錯)

而且你用了c++,為啥不用cin>>name;

c++怎麼輸出字串變數

27樓:匿名使用者

暈,任意一個入門書上都有。

#include

#include

using namespace std;

int main()

28樓:匿名使用者

cout << "string_const" << endl; //字串常量輸出

string str ;

cin >> str;

cout << str << endl;

29樓:匿名使用者

方法1:

char str[100];

cin.getline(str, 100);

cout << str << endl;

方法2:

前面#include

using namespace std;

string s1;

getline(cin, s1);

cout << s1 << endl;

編寫一個c++程式,要求輸入一串字串,輸出裡面的字母,寫的程式**錯了?求高人指點

30樓:倉庫進水

你的 int series[100]; 用錯了,明明是字元怎麼用整型

c++指標指向字串變數後輸出指標為什麼錯誤?

31樓:匿名使用者

int main()

string s1="abc";

char *p=&s1[0];

cout

32樓:匿名使用者

因為字元陣列的陣列名就是常量指標,所以可以直接賦值給指標變數

string 是一個類,而類物件的首地址是不能賦值給 char 型別的指標的,二者型別不同,但你可以用下標運算子得到首字母的地址賦值,即 char *p=&s1[0] 的形式。

為什麼c 中無法用cout輸出字串

用cout輸出字串是可以的。大前提是當前名空間需要是std。即 中使用了 using namespace std 或者單獨宣告使用cout,即 中有 using std cout 否則需要使用 std cout進行輸出。在c 中有兩種字串的概念。1 string 類物件字串。需要使用std名空間,或...

c語言怎麼用printf輸出字串

printf函式的一般格式 printf 格式控制字串,輸出表列 以圖1所示為例。圖1.函式引數包括兩部分 1 格式控制字串,是用雙引號括起來的字串,也稱為轉換控制字串,它指定輸出資料項的型別和格式。它包括兩種資訊 格式說明項 由 和格式字元組成,如 d,f等。格式說明總是由 字元開始,到格式字元終...

C一維陣列,用for語句反向輸出字串

string str console.readline 輸入字串 for int i str.length 1 i 0 i 把字串當字元陣列逆向迴圈 console.readline 暫停程式檢視結果所謂字串 實際上是一個字元陣列 char 所以直接用for逆向迴圈就行了 console.write...