1. 程式人生 > >用printf輸出string型別資料總結

用printf輸出string型別資料總結

#include <string.h>
using namespace std;
int main()
{
   string a;
   a[0]='a';
   a[1]='/0';
   printf("%s/n",a);
   system("pause");
}

出錯: [Warning] cannot pass objects of non-POD type `struct std::string' through `...'; call will abort at runtime

printf只能輸出C語言內建的資料,而string不是內建的,只是一個擴充套件的類,這樣肯定是連結錯誤的。

string不等於char*,&a代表的是這個字串的儲存地址,並不是指向字串的首地址,aa    物件中包含一個指向"string"的指標, &aar得到的是這個物件的地址,不是"string"的地址。

printf輸出string型別應如此操作!

#include<iostream>
#include<string>
using namespace std;

void main()
{
string aa="qqq";
printf("%s",aa.c_str()); //把 string類 的物件裡的字串 轉換成 C 中 char 型變數的字串,c_str() 以 char* 形式傳回 string 內含                                        //字串 

//或者cout<<a;
}

用字元陣列來輸入輸出

char * a="abdcd";

scanf("%s",a);

printf("%s\n",a);

int main()  

{  

char ch[5];  

scanf("%s", ch);  //無需&  

printf("%s", ch);

system("pause");  

return 0;  

}

或用get函式,見上一篇部落格

注,關於   c_str()

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!"

由於string是C的一個 擴充套件型別,其資料賦值可以用其提供的方法:assign(const char *)或直接用其建構函式      
string str( "Now is the time..." );

相關推薦

printf輸出string型別資料總結

#include <string.h> using namespace std; int main() {    string a;    a[0]='a';    a[1]='/0';    printf("%s/n",a);    system("pause"

C語言中printf%d輸出float型別資料,或以%f輸出int型資料的結果

1.測試程式及結果 程式#include"stdio.h" int main() { float a = 7.5, b = 1.23, c = 1.24, d = 1.25; double a1 = 7.5, b1 = 1.23, c1 = 1.24, d1 = 1.

C語言printf輸出string型別字串

知識點: 1.printf函式輸出字串是針對char *的,即printf只能輸出c語言的內建資料,而string不是c語言的內建資料。 2.string型別的物件不止包含字串,還包含了許多用於操作函式,所以&str並非字串的首地址。 3.如需輸出string物件中的字串,可以使

c語言格式輸出剖析——%d輸出float型別資料與int型別%f格式輸出

C語言學習實踐 摘要     本文將從C語言變數的本質,不同型別變數在記憶體中的儲存方式,型別強制轉換,格式輸出4個方面闡述C語言初學階段的一些問題。 關鍵詞:記憶體儲存,型別強制轉換,反彙編 1. 變數     變數來源於數學,是計算機語言中能儲存計算結果或能表示值抽象

printf()函式不能直接輸出string型別

https://www.cnblogs.com/ZERO-/p/7706562.html 因為string不是c語言的內建資料,所以直接printf輸出string型別的是辦不到的。 要這樣輸出: printf("%s\n",a.c_str());   舉例:

thinkphp 模板格式化輸出datetime型別資料

原理 一,PHP時間戳函式獲取指定日期的unix時間戳 strtotime(”2009-1-22″) 示例如下: echo strtotime(”2009-1-22″) 結果:1232553600 說明:返回2009年1月22日0點0分0秒時間戳 二,PHP時間戳函式獲

ElasticSearch最佳入門實踐(四十四)手動建立和修改mapping以及定製string型別資料是否分詞

1、如何建立索引 如果想設定 string 為分詞 把它設定為 analyzed not_analyzed 則是 設定為 exact value 全匹配 no 則 是不能被索引和匹配 2、修改mapping 注意事項:只能建立index時手動建立mapp

java-模擬存放String型別資料的棧

package com.sc; /** * * 用來模擬一個存放String資料的棧 */ class Node{ private String str; public Node(){} public Node(String str){

redis常見型別資料與操作(除String型別資料

Hash型別 Hash是一個String型別的field和value之間的對映表,即redis的Hash資料型別的key(hash表名稱)對應的value實際的內部儲存結構為一個HashMap,因此Hash特別適合儲存物件。相對於把一個物件的每個屬性儲存為String型別,將整個物件儲存在Has

redis操作常用命令(String型別資料

前面已經寫過如何在Ubuntu上部署redis了,https://blog.csdn.net/zc_ad/article/details/84614991 在window中使用redis-cli連線伺服器中的redis-server 1,建立clirun.bat,並在裡面新增一下內容:1

通過okHttp3, 輸入URL ,返回String型別資料

/** * 通過okHttp3 請求網路資料,返回String型別資料 */ public class GetJsonData { private static String TAG = "TESTJSON"; private static String data = "";

redis對String型別資料的處理

package com.xwolf.java.redis; import org.junit.Before; import org.junit.Test; import redis.clients.jedis.Jedis; import redis.clients.jedi

【C++】:sort對string型別進行排序

前言 這個問題來自於leetcode上面的一道題 Valid Anagram Given two strings s and t, write a function to determine if t is an anagram of s. For ex

python 輸出JSON型別資料時遇到的編碼問題(utf8,unicode)

開發背景 遇到的問題 參考資料 開發背景 目前已經用scala開發了RESTFUL API來接收傳送來的使用者聊天資料,正在在使用python開發kafka的consumer消費kafka中的資料,每天儲存成一個檔案,然後載入到h

python輸出不換行(同一行輸出不同型別資料)

不同型別的資料輸出在同一行,在行尾加","即可: #! -*- coding:utf-8 -*- #加這一行可以在檔案中使用中文 print 'This is a string + int', pr

java中String型別資料與Date型別資料相互轉換

//實體類 public class Bean {    public int id;  public String name;  public Date date;  public int getId() {   return id;  }  public void se

ORCALE資料庫Date型別資料String型別接收收出現.0情況也就是顯示毫秒數

如: {    "createdate": "2018-11-28 14:53:24.0", } 但是資料庫中查詢結果並沒有毫秒數    解決方案     public void setCreat

C++中關於string型別究竟能不能cout輸出的問題

一次在MFC中用cout輸出一個string型別字串,編譯時出現這樣一個錯誤: error C2679: binary '<<' : no operator defined which takes a right-hand operand of type '

//scanf和printf輸入輸出string//map的應用//Babelfish------三C

You have just moved from Waterloo to a big city. The people here speak an incomprehensible dialect of a foreign language. Fortun

printf輸出%f %lld問題。輸出型別資料型別不匹配會發生什麼?

——總結自《C PRIMER PLUS》 直接看三個例子: int a=4; printf("%f %e\n",a,a); float b=4; printf("%f %e\n",b,b); int n1=-1,n2=-2,n3=-3; printf("