十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
數(shù)組a的長度總共才100個字節(jié),你的字符串長度就有107個字節(jié)的長度,你自己覺得正常嗎,你用scanf()函數(shù)
成都創(chuàng)新互聯(lián)公司成立于2013年,我們提供高端重慶網(wǎng)站建設(shè)、成都網(wǎng)站制作、成都網(wǎng)站設(shè)計、網(wǎng)站定制、營銷型網(wǎng)站建設(shè)、小程序制作、微信公眾號開發(fā)、成都網(wǎng)站推廣服務(wù),提供專業(yè)營銷思路、內(nèi)容策劃、視覺設(shè)計、程序開發(fā)來完成項目落地,為成都紗窗企業(yè)提供源源不斷的流量和訂單咨詢。
讀入一個數(shù)a[0],你的程序應(yīng)該是存在問題的!至于用gets()函數(shù)讀入,這個才是正確的,你讀入一個字符,字符串長度為1,這才是正確的呀。
正確的答案是5,題目選項有誤。
首先strlen()函數(shù)返回的長度是不包含'\0',
第一個字符為:a
第二個字符為:b
第三個字符為:\n (換行符)
第四個字符為:2
第五個字符為:\ (\\轉(zhuǎn)義為\)
所以答案為5。
(下圖為實際代碼演示)
擴展內(nèi)容:
strlen()函數(shù)(C語言函數(shù)):
strlen所作的僅僅是一個計數(shù)器的工作,它從內(nèi)存的某個位置(可以是字符串開頭,中間某個位置,甚至是某個不確定的內(nèi)存區(qū)域)開始掃描,直到碰到第一個字符串結(jié)束符'\0'為止,然后返回計數(shù)器值(長度不包含'\0')。
參考資料:strlen函數(shù) - 百科
C語言實現(xiàn)可變長度字符串,主要依靠realloc函數(shù)實現(xiàn),主要代碼如下,
//程序功能,判斷插入字符長度len,若大于預(yù)設(shè)大小n,調(diào)整字符串?dāng)?shù)組大小,實現(xiàn)動態(tài)處理數(shù)組大小。
#include stdio.h
#include stdlib.h
#include string.h
int main(int argc, char *argv[])
{
char * pstr = NULL;
int n=10;//字符串初始大小
char str[100];//待插入字符串
int len=0;//待插入字符串長度
pstr = (char*)malloc(sizeof(char)*n);//申請sizeof(char)*n個大小的內(nèi)存空間
if (pstr==NULL)
{
printf("內(nèi)存申請出錯,程序退出!\n");
exit(1);
}
memset(pstr,'\0',sizeof(char)*n);//初始化內(nèi)存空間
printf("輸入待插入字符串:\n");
gets(str);
len=strlen(str)+1;
printf("內(nèi)存申請出錯,程序退出!%d\n",len);
if(lenn)//字符串長度大于初始大小n,重新申請內(nèi)存空間
pstr=(char *)realloc(pstr,sizeof(char)*len);//重新申請內(nèi)存空間
strcat(pstr,str);//將插入字符串連接給pstr
puts(pstr);
if (pstr==NULL)//清理申請內(nèi)存
{
free(pstr);
pstr=NULL;
}
return 0;
}
void *realloc( void *ptr, size_t size );函數(shù)將ptr指向的儲存空間改變?yōu)榻o定的大小size。 參數(shù)size可以是任意大小,大于或小于原尺寸(需要注意的是原始數(shù)據(jù)會丟失)都可以。返回值是指向新空間的指針,如果錯誤發(fā)生返回NULL。