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
一定是个巨魔吧? –