1樓:靜聽書語
strncpy 不會在目標字串末尾加 '\0' 字元。
而函式的臨時變數一般儲存在棧中(先進後出),所以就輸出了 s2 中複製的 "today",然後輸出s2陣列6個字元之後的部分,即棧中的垃圾資料(未初始化的陣列在記憶體中一般是 0xcc,就是燙燙燙),然後輸出字串 s,直到 s 中的 '\0' 字元輸出結束。
2樓:
因為strcpy會自動在最後加\0,而strncpy不會。
把第一句改成這樣就好了。
char s[30]="today is monday!", s2[10]=;
ps:初始化區域性變數是個好習慣。
3樓:戀★殤
因為s的長度大於s2 第6個字元後面沒有'\0' 所以會出現亂碼 一般建議使用strncpy的時候 最後的數字和源字串長度一樣
4樓:匿名使用者
char s[30] = "today is monday!";
char s2[10];
memset(s2, 0x00, sizeof(s2));
strncpy(s2, s, 6);
c語言問題:將字串a複製到字串b中
5樓:
1、首先需要建立一個新的檔案,輸入標頭檔案和主函式。
2、接下來需要定義變數型別。
3、設定完變數型別之後開始呼叫cpy函式。
4、接下來需要定義一個函式,並定義變數型別。
5、最後加一個字串結束符,並在主函式中輸出。
6、編譯。執行,可以看到字串a複製到字串b中。
6樓:聽不清啊
將字串a複製到字串b中,簡單的方法是使用strcpy函式;
標頭檔案:#include
定義函式:char *strcpy(char *dest, const char *src);
函式說明:strcpy()會將引數src 字串拷貝至引數dest 所指的地址。
返回值:返回引數dest 的字串起始地址。
附加說明:如果引數 dest 所指的記憶體空間不夠大,可能會造成緩衝溢位(buffer overflow)的錯誤情況,在編寫程式時請特別留意,或者用strncpy()來取代。
範例#include
#include
void main()
也可以使用迴圈來複制:
#include
void main()
7樓:
main()
8樓:匿名使用者
strcpy(b,a)
9樓:匿名使用者
直接使用strcpy()函式阿
c語言中獲取字串前兩位的函式
10樓:匿名使用者
可以使用strncpy()來將複製字串中前n個字元。比如:
char str1 = "this is a string";
char str2[3];
strncpy(str2, str1, 2);
str2[2] = '\0'; // 此時str2="th"
11樓:匿名使用者
#include
/***** dest - 目標buff
*** src - 源資料
*** len - 獲取源資料左邊的資料個數**/char *getleftx(char *dest, const char *src, unsigned int len)
int main()
12樓:幸巴達
只能是自己寫,
char str="this is a string";
char ch1 = str[0];
char ch2 = str[1];
或者 char *p = str;
char ch1 = *p;
p++;
char ch2 = *p
13樓:匿名使用者
你看看scanf語句的轉義輸入格式 裡面有!!
c++ 關於string , strncpy是否會在結尾自動新增'\0'的問題
14樓:匿名使用者
strlen和sizeof作用於string通過字串化c_str()得出的字串結果都是一樣的。所以用strlen時通過+1使得strncpy將最後一個結尾符拷貝過去了,但是用sizeof的時候沒有+1,結果就沒有最後的結尾符拷貝到p裡面,輸出沒有碰到結尾符,才會亂碼。
strncpy在msdn上的解釋是:
當函式的第三個引數小於等於第二個引數的長度時,空字串不會被加到引數一的結尾。
當函式的第三個引數大於第二個引數的長度時,引數一copy完字串後到整個空間結束全部被置為空字元。
string自己提供了獲取長度和容量的成員函式
str1.length(); // 獲取長度
str1.capacity(); // 獲取容量
至於c_str()得到的東西到底是怎樣的。看原始碼註釋是說帶有結尾字元的常量字串,但是為什麼在strlen和sizeof操作下和c語言的char陣列不同這一點的確不太好解釋。
你再查查其他資料,如果知道原因了,順便也告訴下我...
15樓:
string的實現各不相同,建議不要用 strcpy之類的函式,有些使用了'\0',有些'\0'是被隱藏的
直接使用string::assign 等string提供的函式比較保險
比如char str1 = "hello"
std::string str2(str1);
std::string str3;
str3.assign(str1, str1 + strlen(str1));
C語言字串問題,C語言中,字串是什麼?
這迴圈需要執行4次,對應的字元就是0001,也就是說這個sc需要5個空間,加一個 0 for i 0 i 2.你這個程式每次執行的結果可能是不確定的,因為你沒有初始化sc陣列,printf以字串的形式輸出,他是遇到 0 字元才結束的,所以為了保證程式的結果是一致的,建議初始化陣列。sc 5 這樣就可...
c語言中關於字元陣列和字串的區別
陣列的長來度是固定的,源我們知道在哪個地方結束。對於c型別的字串,要想知道在那個地方結束的話,我們只需要檢測某個位置的字串是不是 0就行了,也就是說c型別的字串是以 0標記結束的。所以字元陣列和c型別字串的區別就是那個 0。其實從字元陣列和c型別字串的儲存位置上來說也是不同的,這也算是一個區別吧。結...
C語言字串輸出亂碼,C語言,字串輸出是亂碼
輸出來亂碼是必須的,因為你的數源據型別搞錯了bai,你使用的是字元 du函式zhistringcopy 來拷貝字元 那麼要處理的數dao據當是char型別,然而你所定義的指標應當也是char型別 你應當修改的地方是 int str1,str2 請將int改為char 將你程式中的所有int替換為ch...