int string_length(char str[])
{
int i;
for(i=200; i>=0; i--)
{
//printf("%c \n",str[200]);
printf("%d",i);
if(str[i] !=NULL)
{
return(i);
}
}
}
我想如果字符串返回正確的字符串大小:EEE RRR:它應該返回7但這回200總是數字符串長度c
int string_length(char str[])
{
int i;
for(i=200; i>=0; i--)
{
//printf("%c \n",str[200]);
printf("%d",i);
if(str[i] !=NULL)
{
return(i);
}
}
}
我想如果字符串返回正確的字符串大小:EEE RRR:它應該返回7但這回200總是數字符串長度c
你可以用這個來代替一個。它更簡單
int string_length(char *str)
{
int i =0;
while(*str++) i++;
return i;
}
,並因爲字符串的邊界外的數據傳遞的是隨機的,大多沒有'\0'
您可以使用預定義功能strlen()
從#include <string.h>
string_length(NULL)和SIGSEGV – jacekmigacz
@jacekmigacz甚至從'#include
MOHAMED:肯定!,那是user2426801的註釋讓他知道 – jacekmigacz
儘可能地堅持你原來的代碼,
int string_length(char str[])
{
int i;
for(i=0; i<200; ++i)
{
printf("[%d] : %c \n", i, str[i]);
if(str[i] == '\0')
{
return(i);
}
}
}
或者,如果你想有一個最低限度的功能:
int string_length(char* s)
{
return (*s)? string_length(s+1)+1 : 0;
}
爲什麼你是從第200個角色開始的嗎?您無法預先知道此內存地址是否已分配。您冒着程序崩潰的風險。與此相關的是,您不檢查傳入函數的字符串是否有效(檢查它是否具有非空地址)
相反,從索引0開始並繼續工作。
在c/C++中,字符串的末尾標有'\ 0'字符。嘗試尋找這個而不是NULL(除非你已經將NULL定義爲'\ 0')
未定義的短字符串行爲。你爲什麼認爲從200開始向後倒數會起作用? –
如果你傳遞了一個長度爲7的字符串,你需要什麼,爲什麼要在'str [200]'做什麼? – nos
一定是個巨魔吧? –