求救!C語言中字串函式strncpy的輸出問題

2022-03-08 23:33:15 字數 2999 閱讀 9426

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...