-
你說其中乙個字元是乙個變數,但那有多少個? 我現在給你最後乙個,你看看。
例如,如果鍵入 A,則鍵入 hello A,如果鍵入 B,則鍵入 B ,依此類推,這應該對您有所幫助。
#include
#include
using namespace std;
int main()
string strtmp("hello " );
str[1];
cin>>str;
string str_str=strtmp+(string)str;
cout<< str_ endl;
return 0;
-
如果將此字串定義為字元陣列,則只能將值分配給其中乙個陣列成員,而其他成員的值不會更改。
-
p1 是指標,它是乙個位址,+2 是位址 +2,位址是 strcat(p1+2,p2+1) 到接下來的 2 個位址:p1=“abcd”,因為 p1 指向"abcd"'a'所以 p1+2 指向'c'位址 p2=“abcd”,因為 p2 指向"abcd"'a'所以 p2+1 指向'b'所以strcat(p1+2,p2+1)是意志"cd"跟"bcd"字串連線和 get"cdbcd"然後執行 strcpy(str+2,"cdbcd"st[50]=“xyz”,因為 str 指向"xyz"'x'所以 str+2 指向'z'所以,strcpy(str+2,"cdbcd"也就是說,將"z"跟"cdbcd"複製字串,複製後複製原始字串'z'對於空間的開始"cdbcd"覆蓋,和前面"xy"不受影響,因此最終輸出"xycdbcd"
還有乙個問題。
1 程式不僅有語法錯誤,而且邏輯錯誤嚴重,無法執行。 strcat(p1+2,p2+1);p1 是指標的常量值,不能由引用物件修改。 2 程式只有在更改為以下內容時才能執行。
include include void main() 結果是:xycdbcd
-
strcat,已連線。
strcat(p1+2,p2+1) 是乙個以 (p1+2 位) 開頭並連線(p2+1 位)的字串。
返回值為 p1+2。
這是CDBCD
strcpy(str+2,"cdbcd"這是繁殖。 複製以 str+2 開頭,結果為 xycdbcd
-
p1 p2 str 記錄字串 strcat 串聯字串的第乙個位址,p1 位置為 'a',+2,向後移動 2 至'c'cdp2 位置為 'A', +1,後移至 1'b'BCD剪接為CDBCD
strcpy 複製字串。
str 位置是'x'+2 將 2 移回 'z' 並開始從 'z' 複製,cdbcd 替換 'xyz) 並且從 z 開始的所有內容都得到 xycdbcd
-
char *p1="abcd", *p2="abcd", str[50]="xyz";
strcpy(str+2,strcat(p1+2,p2+1));將 p2+1 連線到 P1+2 並將其複製到 str+2。
printf("%s",str);
P1+2 是 cd
P2+1 是 BCD
strcat(p1+2,p2+1) 是 cdbcdstr+2 是 z
strcpy(str+2,strcat(p1+2,p2+1)) 是 xycdbcd,其中 z 被覆蓋。
-
這是將陣列傳遞給子函式操作,實際上它只能傳遞陣列的指標,即子函式的陣列指標的內容與主函式的內容相同,在子函式中修改其內容就是改變主函式中陣列的內容。
如果引數設定為 const,則子函式無權修改其內容,從而保護資料的安全。
因此,在將指標資料寫入子函式時,如果不想(或不能)更改指標引用的資料,請將指標的型別宣告為 const,即常量,以防止指標的內容在子函式中被無意中更改。 但是,對於簡單的資料傳輸,由於資料被複製到引數中,因此子函式和主函式的資料根本不想做,因此沒有必要將資料宣告為 const。
如果第乙個引數也是常量,則該函式不能對第乙個引數進行操作,因此無法實現該函式的功能,即串聯字元操作。
char * strcat(char *a,const char *b)
a 的長度必須大於字串 a 和 b 的實際長度之和,否則將越過邊界。 越線後不會錯,只是執行起來會得到奇怪的結果。。。
這就是這個函式應該如何實現。 不需要傳遞 a 的長度;
void main()
結果輸出為 abcefg
你的函式只能返回乙個char型別的資料,你返回乙個char[30],這是無法實現的,c[30]只存在於子函式中,我不需要加1,在第乙個for迴圈之後,i已經是字元的尾巴了。
-
strcat 是將引數 2 的內容(字串)新增到引數 1 中。
const 對應的引數可以是常量字串,例如:"abc123".
第乙個引數用於從跟蹤中新增字串,因此它必須是變數,而不是常量字串。
char s1[80]="xyz";
strcat(s1,"abc123");S1 內容更改"xyzabc123"
-
strcat 函式的作用是將第二個引數的字串新增到第乙個引數的末尾並連線起來,這樣第乙個字元陣列就可以更改,所以它不能是 const
const 陣列是無法更改的陣列...
-
您的函式正在白白消耗 CPU 時間和記憶體,並且沒有任何效果。
所實現的並不是strcat的初衷。
strcat 是將第二個引數引用的字串連線到第乙個引數的末尾。
第乙個必須寫入,所以 char*,第二個是唯讀的,所以 const char* 陣列引數退化為指標,這是沒有辦法解決的。
如果要傳入大小,則必須新增其他引數。
即使使用傳統的 0 端來確定字串的末尾,也無法確定原始陣列的大小。
所以其實strcat有很大的安全隱患,實際的c程式設計是strncat
此外,傳遞 string&、const string&,使其成為內部頻寬大小。
使用字串就是使用它的第乙個位址(有時和長度,實際上,擁有第乙個位址就足夠了),無論字串有多長。 最明顯的例子是,當乙個(常量)字串作為引數及其第乙個位址傳遞時。 所以你的比較只是位址的比較。
您可以嘗試輸出,scanf 函式是從緩衝區讀取的資料,第二個字串的資料是空格或換行符製表符。 您可以單獨讀取它們,但在兩者之間新增 fflush(stdin); 清除緩衝區。