c字串的初始化問題
c字串的初始化問題:
char *str = (char*)malloc(sizeof(char)*10);
for(int i = 0; i < 7; i++)
str[i] = '#';
printf(“%s\n", str);
上面的程式碼中,只初始化了前7個位置,後面的3個沒有初始化,所以輸出後面的3個字元會隨機初始化,會出現亂碼現象。
正確的做法是在第8個字元的位置賦值為“\0”,這樣才會只輸出前7個字元。
而用scanf()給c字串賦初值時不用在最後一個字元後加“\0”,因為scanf()會在最後一個字元後自動加上“\0”,但是當我們不用scanf()函式初始化時,必須要在後面加上“\0”。或者也可以用memset()函式將所有字元都初始化為‘ ’。
用字元陣列時也一樣。
相關推薦
C語言字串初始化與操作
C語言中字元一般是單引號,而字串是雙引號,且字串是以NULL(\0)結尾的零個或多個字元序列。C中沒有字串這個資料型別的,只能通字元陣列或者字元指標來儲存字串變數。下面具體看看C中字串怎麼實現和操
C++11 初始化列表(initializer_list)
clu amp space return ret 列表 stl容器 int stat C++11對原有的初始化列表(用花括號圍住的若幹個值)進行了大幅的擴展。以下寫法在C++11中都是被允許的: 1 int static_arr[5] = {1, 2, 3, 4};
C++11 初始化
blog 發生 [] person 精度 丟失 ios turn warn C++11 初始化 統一初始化語法 C++11新添加初始化列表 std::initializer_list<>類型,可以通過{}語法來構造初始化列表 。初始化列表是常數;一
c++中初始化列表的初始化變量順序問題
bsp 變量 結果 請問 iostream 類的成員 sin vat 並不是 例題來看:請問下面程序打印出的結果是什麽? 1 #include <iostream> 2 #include <string> 3 4 using namesp
C# 委託初始化
原文連結:https://www.cnblogs.com/OpenCoder/archive/2009/09/23/1572646.html 使用+=時,如果委託還沒有例項化(委託例項為null),它會自動用+=右邊的函式例項化委託 如果此時委託已經例項化,它會只把+=右邊的函式註冊到委託例項上
C++ 指標初始化要注意的地方
1. 宣告多個指標的時候: int* P1,P2; 如上所示,宣告的是建立一個指標P1和一個int型的變數P2。而不是宣告的兩個指標。 對每個指標變數名,都需要使用一個*。 在C++中,int* 是一種複合型別,是指向int的指標。 2. 可以在宣告語句中初始化指標,但是,在這種情況下,被
C#變數初始化問題:欄位初始值無法引用非靜態欄位、方法或屬性
問題:欄位初始值設定項無法引用非靜態欄位、方法或屬性的問題 下面程式碼出錯的原因,在類中定義的欄位為什麼不能用? (1) public string text = test(); //提示 欄位或屬性的問題欄位初始值設定項無法引用非靜態欄位、方法 protected vo
c++列表初始化(轉自cppreference)
列表初始化 (C++11 起) C++ C++ 語言 初始化 從花括號初始化器列表初始化物件 語法 直接列表初始化 T object { arg1, arg2, ... }; (1) T { arg1, arg2, ... };
C/C++陣列初始化的總結
目錄 陣列定義不初始化會被隨機賦值 陣列初始化的幾種形式 陣列初始化為某一固定值 memset(陣列名,值,sizeof(陣列名)) fill(begin(),end(),value) 以前剛開始學陣列初始化,一直都沒搞太清楚,包括參加PAT考試,直到看了胡凡的《演算
C++成員初始化列表
C++類成員初始化列表 C++型別定義 C++建構函式的初始化列表定義 C++建構函式執行的兩個階段 為什麼使用初始化列表 C++裡面哪些東西必須放在初始化列表裡面 成員變數的初始化順序 這邊文章主要學習C++
C++中初始化方式的幾點特殊情況
在多數情況下,各個初始化方式之間可以相互等價的使用,不過也存在一些特例,總結如下: 1、使用拷貝初始化(使用“=”),只能提供一個初始值: string s5 = "hello";
C++陣列初始化
C++陣列初始化 定義: int *pia = new int[10]; // array of 10 uninitialized ints 此 new 表示式分配了一個含有 10 個 int 型元素的陣列,並返回指向該陣列
c/c++使用{}初始化陣列需要注意的(2)
c/c++語言中,陣列初始化的方式主要有三種: 1、宣告時,使用 {0} 初始化; 2、使用memset; 3、用for迴圈賦值。 這次我們重點關注第1點,我們來看下面的程式碼 int main(int argc, char *argv[]) { int a[10];
C++的初始化列表(Initilization List)
初始化類的成員有兩種方式,一是使用初始化列表,二是在建構函式體內進行賦值操作。第二種我們都比較熟悉了,來看看第一種情況。 一、 為什麼使用初始化列表(Initialization list) 使用初始化列表一方面主要是基於效能問題,
C#中初始化串列埠的函式定義與資料接收程式碼片段
// init serial port private void Init_SerialPort() { string s; serialPort1.Close();
C/C++陣列初始化的一些誤區
以前我這樣初始化一個數組,並自我感覺良好: int a[5] = { 0 }; // 全部初始化為0這種簡單的寫法讓我非常爽,於是我又想把陣列全部初始化為1:int a[5] = { 1 }; // 我想全部初始化為1直到十分鐘前,我都以為這句程式碼確實能夠將5
C++11初始化列表與引數列表的作用
最近遇到了一個程式,一開始有些莫名其妙,最後經過思考、猜想、驗證的過程,將其總結如下: 首先先上程式碼: 函式宣告如下: class Controller { using AnalysisManager = NST::analysis::AnalysisMana
c++中初始化列表和建構函式初始化
初始化和賦值對內建型別的成員沒有什麼的的區別,在成員初始化列表和建構函式體內進行,在效能和結果上都是一樣的。對非內建型別成員變數,因為類型別的資料成員的資料成員物件在進入函式體前已經構造完成,也就是說在成員初始化列表處進行構造物件的工作,呼叫建構函式,在進入函式體之後,進行的是對已經構造好的類物件的賦值,又呼
C++直接初始化與拷貝初始化學習筆記
初始化分為兩種 1. 直接初始化直接呼叫與實參匹配的建構函式,形式如“T t(u)”。 2. 拷貝初始化:複製初始化首先使用指定建構函式建立一個臨時物件,然後用複製建構函式將那個臨時物件複製到正在建立的物件”,形式如“T t=u”。
C++陣列初始化的誤解
一直以為 int a[256]={0};是把a的所有元素初始化為0,int a[256]={1};是把a所有的元素初始化為1. 除錯的時檢視記憶體發現不是那麼一回事,翻了一下《The C++ Programming Language》總算有定論。PDF的竟然不然複製,就把它這章翻譯了, 如下5.2.1