1. c語言問題 關於strlen

a是首元素地址沒錯。

但不是說有255位!

首先printf中你少了個逗號...

你可以嘗試著把a中的字元列印出來檢查一下。可以看到當i=255的時候,-1-255=-256,最低位的8個bit全部為0,在程序中被判定為'',也就是字元串的結束符,這會使得在用strlen的時候只統計到該位為止的長度。

除此之外,當i=511和i=767的時候,在a[511]、a[767]中也被賦值為了''。

通過如下的語句可以檢測出結束符的位置:

intmain(i)
{
chara[1000];
inti;
for(i=0;i<1000;i++)
{
a[i]=-1-i;
if(a[i]=='')
{
printf("%d ",i);
}
}
printf("%d",strlen(a));
system("pause");
return0;
}

2. 用strlen()時,頭文件要用什麼

頭文件要用#include<string.h>。

strlen()只是統計字元串的長度,統計到''結束,但不包括'',這個與sizeof()不一樣。

對於用雙引號引起來的字元串,系統默認最後一位字元為'',如你自己定義的:

chara[]="china";

charb[]={"china"};

另外,數組初始化還可以是一個字元一個字元賦值,如:

charc[]={'c','h','i','n','a'};

chard[]={'c','h','i','n','a',''};

但系統不會自動給你在最末位添加'』。

(2)c語言strlen頭文件擴展閱讀:

頭文件的作用:

1、頭文件可以定義所用的函數列表,方便查閱你可以調用的函數。

2、頭文件可以定義很多宏定義,就是一些全局靜態變數的定義,在這樣的情況下,只要修改頭文件的內容,程序就可以做相應的修改,不用親自跑到繁瑣的代碼內去搜索

3、頭文件只是聲明,不佔內存空間,要知道其執行過程,要看你頭文件所申明的函數是在哪個.c文件里定義的,才知道。

盡管C語言提供了許多低級處理的功能,但仍然保持著良好跨平台的特性,以一個標准規格寫出的C語言程序可在許多電腦平台上進行編譯,甚至包含一些嵌入式處理器(單片機或稱MCU)以及超級電腦等作業平台。

3. c語言中strlen是什麼意思

strlen:計算字元串長度的庫函數名。

str:通常,程序員喜歡用它作 字元串 變數名。它是string(英文詞字元串的縮寫)。

len:通常,程序員喜歡用它作 變數名。它是 length(英文詞長度的縮寫)。

例如:

char str[20]="I am a student";

int len;

len = strlen(str);

printf("the string length is: %d",len);

(3)c語言strlen頭文件擴展閱讀:

函數原型

externunsignedintstrlen(char*s);

在Visual C++ 6.0或Dev-C++中,原型為size_tstrlen(constchar*string);,其中size_t實際上是unsigned int,在VC6.0或Dev-C++中可以看到這樣的代碼:

typedefunsignedintsize_t;

頭文件:string.h或cstring

格式:strlen (字元指針表達式)

功能:計算給定字元串的(unsigned int型)長度,不包括''在內

說明:返回s的長度,不包括結束符NULL。

strlen(char*)函數求的是字元串的實際長度,它求得方法是從開始到遇到第一個'',如果你只定義沒有給它賦初值,這個結果是不定的,它會從aa首地址一直找下去,直到遇到''停止。

4. c語言中strlen()怎麼用

strlen所作的僅僅是一個計數器的工作,它從內存的某個位置(可以是字元串開頭,中間某個位置,甚至是某個不確定的內存區域)開始掃描,直到碰到第一個字元串結束符'\0'為止,然後返回計數器值。
原型:extern unsigned int strlen(char *s);,在Visual C++ 6.0中,原型為size_t strlen( const char *string );,其中size_t實際上是unsigned int,在VC6.0中可以看到這樣的代碼:typedef unsigned int size_t;。
頭文件:string.h
格式:strlen (字元數組名)
功能:計算字元串s的(unsigned int型)長度,不包括'\0'在內
說明:返回s的長度,不包括結束符NULL。

因為字元串是以字元'\0'結尾的,但是這個'\0'在我們的字元串是隱藏的,我們看不到。實際上是有的.例如:
char a[4]="abc";//這里數組的元素個數至少應該是4,否則此字元串不叫字元串了,只能叫字元數組了。
strlen判斷一個字元串的結束就是以其末尾的'\0'為界限。其實現代碼可以模擬為以下:
int strlen(char *p)
{
int i=0;
while(*p++)i++;
return i;
}
所以他是不包括'\0'這個字元的。

5. 在C語言中Strlen是什麼意思

Sizeof與Strlen的區別

1.sizeof操作符的結果類型是size_t,它在頭文件中typedef為unsignedint類型。
該類型保證能容納實現所建立的最大對象的位元組大小。

2.sizeof是算符,strlen是函數。

3.sizeof可以用類型做參數,strlen只能用char*做參數,且必須是以''\0''結尾的。
sizeof還可以用函數做參數,比如:
short f();
printf("%d\n", sizeof(f()));
輸出的結果是sizeof(short),即2。

4.數組做sizeof的參數不退化,傳遞給strlen就退化為指針了。

5.大部分編譯程序 在編譯的時候就把sizeof計算過了 是類型或是變數的長度這就是sizeof(x)可以用來定義數組維數的原因
char str[20]="0123456789";
int a=strlen(str); //a=10;
int b=sizeof(str); //而b=20;

6.strlen的結果要在運行的時候才能計算出來,時用來計算字元串的長度,不是類型占內存的大小。

7.sizeof後如果是類型必須加括弧,如果是變數名可以不加括弧。這是因為sizeof是個操作符不是個函數。

8.當適用了於一個結構類型時或變數, sizeof 返回實際的大小,
當適用一靜態地空間數組, sizeof 歸還全部數組的尺寸。
sizeof 操作符不能返回動態地被分派了的數組或外部的數組的尺寸

9.數組作為參數傳給函數時傳的是指針而不是數組,傳遞的是數組的首地址,
如:
fun(char [8])
fun(char [])
都等價於 fun(char *)
在C++里參數傳遞數組永遠都是傳遞指向數組首元素的指針,編譯器不知道數組的大小
如果想在函數內知道數組的大小, 需要這樣做:
進入函數後用memcpy拷貝出來,長度由另一個形參傳進去
fun(unsiged char *p1, int len)
{
unsigned char* buf = new unsigned char[len+1]
memcpy(buf, p1, len);
}

我們能常在用到 sizeof 和 strlen 的時候,通常是計算字元串數組的長度
看了上面的詳細解釋,發現兩者的使用還是有區別的,從這個例子可以看得很清楚:

char str[20]="0123456789";
int a=strlen(str); //a=10; >>>> strlen 計算字元串的長度,以結束符 0x00 為字元串結束。
int b=sizeof(str); //而b=20; >>>> sizeof 計算的則是分配的數組 str[20] 所佔的內存空間的大小,不受裡面存儲的內容改變。

上面是對靜態數組處理的結果,如果是對指針,結果就不一樣了

char* ss = "0123456789";
sizeof(ss) 結果 4 ===》ss是指向字元串常量的字元指針,sizeof 獲得的是一個指針的之所佔的空間,應該是

長整型的,所以是4
sizeof(*ss) 結果 1 ===》*ss是第一個字元 其實就是獲得了字元串的第一位'0' 所佔的內存空間,是char類

型的,佔了 1 位

strlen(ss)= 10 >>>> 如果要獲得這個字元串的長度,則一定要使用 strlen

6. c語言strlen函數問題

strlen實際上是,從參數表示的地址往後找,找到第一個'',即串尾。然後計算''至首地址的「距離」,即隔了幾個字元,從而得出長度。

char x[]={0xBC,0xDD,0xCA};中,實際上是定義了一個char型的數組,而由於x[0],即0xBC開始往後找,一直到0xCA,都沒'',所以會繼續往後。當然,實際上往後找到的是其他值。

改char x[]={0xBC,0xDD,0xCA,0x00};後,應該就是3了。

(6)c語言strlen頭文件擴展閱讀:

strlen所作的僅僅是一個計數器的工作,它從內存的某個位置(可以是字元串開頭,中間某個位置,甚至是某個不確定的內存區域)開始掃描,直到碰到第一個字元串結束符''為止,然後返回計數器值(長度不包含'')。

函數原型

extern unsigned int strlen(char *s);

在Visual C++ 6.0或Dev-C++中,原型為

size_t strlen(const char *string);

,其中size_t實際上是unsigned int,在VC6.0或Dev-C++中可以看到這樣的代碼:

typedef unsigned int size_t;

頭文件:string.h或cstring

格式:strlen (字元數組名)

功能:計算給定字元串的(unsigned int型)長度,不包括''在內

說明:返回s的長度,不包括結束符NULL。

參考資料:strlen-網路

7. c語言中strlen()庫函數與stdio.h頭文件問題急著求解、

首先,一個程序必須是有輸入輸出的。這樣,stdio.h 這個文件就是必須的。
調用string.h這個頭文件的是可以不調用stdio.h這個頭文件的。
如:
#include <string.h>
int main(int argc, char *argv[])
{
int i;
char s[100]="abc";
for(i=0;i<strlen(s);i++)
{
s[i] = s[i] +1;
}
return 0;
}
但這個程序沒有任何輸入輸出。

8. c語言中strlen的用法

__cdecl
strlen(const
char
*);
計算字元串的實際長度(不含字元串結束標志『\0』),並將計算結果作為函數值返回。