題目要求
若有以下定義和語句:
char *s1="12345",*s2="1234";
printf("%d\n",strlen(strcpy(s1,s2)));
則輸出結果是
思路分析
strcpy是一種C語言的標準庫函數,strcpy把含有'\0'結束符的字符串複製到另一個地址空間,返回值的類型爲char*。
strlen所作的是一個計數器的工作,它從內存的某個位置(可以是字符串開頭,中間某個位置,甚至是某個不確定的內存區域)開始掃描,直到碰到第一個字符串結束符'\0'爲止,然後返回計數器值(長度不包含'\0')。
翻譯文字strcpy(s1,s2)將字符串"1234"全部複製到s1中,將原來的內容覆蓋。s1中的12345分別被1234\0取代。故最終計算得出答案爲4。
注意,如果要用代碼執行,這樣寫是不行的!
char *s1="12345",*s2="1234";C語言中對於字符指針,這樣賦值是錯誤的,如果定義爲字符數組的話應該這麼寫
char s1[6]={"12345"},s2[5]={"1234"}
代碼演示
#include <stdio.h>
#include <string.h>
int main()
{
char s1[6]="12345",s2[5]="1234";
printf("%d\n",strlen(strcpy(s1,s2)));
return 0;
}
查看結果
和咱們前面分析的一樣,輸出結果爲 4