C++ 字串取值,取址,引用 例題
有如下程式段:
void GetMemeory(char *p)
{
p = (char *)malloc(100);
}
void Test()
{
char *str = NULL;
GetMemeory(str);
strcpy(str, "Thunder");
strcat(str + 2, "Downloader");
printf(str);
}
請問執行Test函式結果是:
A Thunder Downloader
B under Downloader
C Thunderownloader
D 程式崩潰
str為一個指標,但實際上為int型別,傳入函式內部並不會發生任何改變(str是一個指標,在32位的機器上,它是一個32位的整數,儲存一個記憶體地址的值)
GetMemory函式執行完成後,str仍然指向NULL,所以賦值時回奔潰
正確的做法應該使用雙指標 或使用引用
按值傳遞,函式返回後,區域性變數的值不會隨著呼叫函式內部的實現—-改變而=改變。
按地址傳遞和按指標傳遞,才會改變區域性變數的值。
這道題,GetMemory()是按照按值傳遞的,因而區域性變數,不會因為函式內部 p = (char*)malloc(100);
的實現,而更改。返回主函式後, 仍然是 *str = NULL;。因而在改指標執行操作,會造成程式崩潰。
因為沒有為它分配記憶體。
雙指標方法:
連結:https://www.nowcoder.com/questionTerminal/681153b22f4d4622a7bf63cb6670aa23
來源:牛客網
void GetMemory(char **p){
*p = (char *)malloc(100);
}
void Test(){
char *str = NULL;
GetMemory(&str);
strcpy(str,"Thunder");
strcat(str+2,"Downloader");
printf(str);
}
引用方法:
void GetMemeory(char* &p)
{
p = (char *)malloc(100);
}
void Test()
{
char *str = NULL;
GetMemeory(str );
strcpy(str, "Thunder");
strcat(str + 2, "Downloader");
printf(str);
}
strcat用於將兩個char型別連結的函式。
函式原型:extern char *strcat(char *dest,char *src);
引數:
dest 目標陣列指標
src 源字串指標
返回值:返回指向dest的指標
函式功能:把src所指字串新增到dest結尾處(覆蓋dest結尾處的’\0’)並新增’\0’。
printf(str);
執行結果:
ThunderDownloader
若最後列印資訊為:
printf(str+2)
執行結果:
underDownloader
cout物件認為char的地址是字串的地址,因此一直輸出知道遇到空字元結束。
相關推薦
typeof 的取值類型範圍,以及typeof和instanceof的區別
typeof的取值範圍: 以上一共6種取值範圍(number,string,object,function,boolean,undefind),分別對應。 instanceof: 要求前面是個物件,後面是個建構函式,而且返回的是布林值,必須是true或fal
【C++入門筆記】傳值、傳址和引用
預設情況下,引數只能以值傳遞的方式給函式。 這句話的理解是,被傳遞到函式的只是變數的值,永遠不會是變數本身。 下面來看一段示例程式碼: #include <iostream> void changeAge( int age, int newAge ); main(
sql語句 集合之間的重疊取值 區間取值比較 薪資範圍
SQL語句 篩選出符合薪資範圍的簡歷 假如打比我是HR 我要從求職者的簡歷中篩選出符合我要求範圍的求職者 這是我收到的所有求職簡歷(start為最低薪資,end為最高薪資) 我的需求 我要從
C++中賦值操作符為什麼要返回引用型別
class Test { Test& operator= (const Test& t) { } } 這個是我們熟悉的賦值操作符函式的格式,但是該函式為什麼非得要返回一個引用呢。 查閱了很多資料感覺這種解釋比
C++ 字串取值,取址,引用 例題
有如下程式段: void GetMemeory(char *p) { p = (char *)malloc(100); } void Test() { char *str = NULL; GetMemeory(str); s
c語言==字元陣列與字串,char的取值範圍(1)
求char型別陣列的strlen長度 昨天老師給了一道題目 #include <stdio.h> #include "string.h" int main() { int i; char a[1000]; fo
將R[n]中的每個字元按照字母字元、數字字元和其他字元的順序排列。要求,利用原有空間。 輸入輸出樣例:1組 #1 樣例輸入: 7 //n的取值,表示字元陣列中包括有多大 a b 1 2 c ] d
將R[n]中的每個字元按照字母字元、數字字元和其他字元的順序排列。要求,利用原有空間,且各類字元順序也不改變。 輸入輸出樣例:1組 #1 樣例輸入: 7 //n的取值,表示字元陣列中包括有多大 a b 1 2 c ] d //7個字元元素都是什麼 樣例輸出:
SQL根據字串型別欄位進行排序,可以在取值的時候處理
DataTable dt = DB.ExecuteDataTable(sql.ToString(), CommandType.Text, null);//資料來源 dt.Columns.Add("status", Type.GetType("Sys
setlocale(LC_ALL, ""); 取值為空字串" "(注意,不是NULL),則locale與本地環境所使用的編碼方式相同(在本地化時,應該很有用);
在C執行庫提供的多位元組字元-寬字元轉換函式:mbstowcs()/wcstombs()中,需要用到全域性變數locale( locale encoding ),以指定多位元組字元的編碼型別 1. 功能: 用來定義全域性變數:locale(locale encoding) 標頭檔案: setlocal
在C語言中,int型資料的取值範圍?
在C語言中,int型資料所佔的位元組和具體的編譯器有關,32位編譯器int佔4個位元組(VC,C-free),16位編譯器int佔2個位元組(詳見“int型資料所佔位元組和什麼有關”)。 以兩個位元組為例: 在C中,int型資料是一個有符號的整型資料,其最高位為符號位(0表
C#List轉字串,字串轉List,字元陣列轉Int陣列,字串轉string,取某一位置字元等
List轉字串 [C#] 純文字檢視 複製程式碼 01 02 List<string> List = new List<string>(); string strArray = string.Join(",", List
C++程式碼片段(一)萃取函式返回值型別,引數型別,引數個數
函式的型別主要集中在以下幾種 函式指標 函式物件,是一個類物件,內部過載的operator()函式是一個函式指標 lambda,匿名函式物件,同函式物件 function物件 後三者都是類物件,可以看成一種型別 定義基礎模板類 t
jquery操作select(取值,設置選中)
tle 當前 一個 true replace 引號 邏輯 func itl 比如<select class="selector"></select> 1、設置value為pxx的項選中 $(".selector").val("pxx");
python 嵌套字典比較值,取值
ima () pie port highlight odi pes brush logs #取值import types allGuests = {‘Alice‘: {‘apples‘: 5, ‘pretzels‘: {‘12‘:{‘beijing‘:456}}},
在0~N個數字中,取指定個數的不重復數字,要求這些數字的和為指定值,求所有結果
readline tco write span count string rgs logs index 1 using System; 2 using System.Collections.Generic; 3 using System.Linq;
48.reduce排序,去重,取最大值
prev col function red logs ngui ras value ber var arr = [2,4,1,-1,9] //取最大值 var maxValue = arr.reduce(function(a,b){ return a>
python 字典合並,字典取值,列表轉字典
就是 nbsp 2.7 fault font ... 3.5 bsp 轉化 1、字典的合並 # 第一種 用Python的內置方法,dict與**解包的方式 >>> a = {‘name‘:1,‘b‘:2} >>> b = {‘name‘
django 數據庫的一對多,多對一取值
多對一 行記錄 對象 分享圖片 Go 技術 記錄 inf 一對多 一對多 是一行記錄的對象,然後點外鍵,就可以點到多的那張表的屬性了。 django 數據庫的一對多,多對一取值
python練習題,寫一個方法 傳進去列表和預期的value 求出所有變量得取值可能性(例如list為[1,2,3,4,5,6,12,19],value為20,結果是19+1==20只有一種可能性),要求時間復雜度為O(n)
num bubuko com pri def 代碼 data- 取值 .com 題目:(來自光榮之路老師)a+b==valuea+b+c=valuea+b+c+d==valuea+b+c+d+...=valuea和b....取值範圍都在0-value寫一個方法 傳進去列
py呼叫oracle的儲存過程,注意procedure的out取值方式
#!/usr/bin/env python import sys import csv import cx_Oracle import codecs import os os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.ZHS16GBK'