- 主题:有办法求含有\0的字符数组的长度嘛?
数组内任何位置都可能出现数量不定的\0
比如:
char arr[] = {'a', '\0', '\0', 'd', '\0'};
不能用sizeof之类的库函数
chatGPT给了我错误的答案,判断\0来求解的
库函数strlen也求错了
用sizeof可以求对
如果没办法求我就放弃了
--
修改:sqsl FROM 111.193.230.*
FROM 111.193.230.*
少侠,我认为你用了一本错误的教材
全是这种没事找事的题目
你这问题类似你问 如果一个人心跳停了之后怎么能测到他的心跳
【 在 sqsl 的大作中提到: 】
: 数组内任何位置都可能出现数量不定的\0
: 比如:
: char arr[] = {'a', '\0', '\0', 'd', '\0'};
: ...................
--
FROM 117.30.138.*
既然0不标识字符串结束了,那什么字符标志着你的字符串结束,你就找这个字符不就完了
--
FROM 155.190.3.*
错误的问题,可不就只有错误的答案。
【 在 sqsl 的大作中提到: 】
: 数组内任何位置都可能出现数量不定的\0
: 比如:
: char arr[] = {'a', '\0', '\0', 'd', '\0'};
: 不能用sizeof之类的库函数
: chatGPT给了我错误的答案,判断\0来求解的
: 库函数strlen也求错了
: 用sizeof可以求对
: 如果没办法求我就放弃了
--
FROM 163.125.228.*
字符串,要么有单独的变量存放其长度,要么有结束符。
C里的字符串约定的结束符是0,strlen()等字符串函数假定传入的参数是遵循这个约定的。
不按这个约定,那就是自己山寨了一个“字符串”,或者不叫字符串,而只是一个char array。
静态array的长度不是求的(不是运行期求),而是定义变量时指定的(通过编译期的sizeof等获得)。
只有动态array的长度是运行期计算的。
所以,要区分三个东西:
1、以零结尾的字符串
2、静态的char array
3、动态的char array
--
修改:z16166 FROM 61.48.130.*
FROM 61.48.130.*
对,我问的是字符数组的情况,字符串中间不会有\0
您说的动态数组指的是malloc之类的库函数生成的数组嘛?
【 在 z16166 的大作中提到: 】
: 字符串,要么有单独的变量存放其长度,要么有结束符。
: C里的字符串约定的结束符是0,strlen()等字符串函数假定传入的参数是遵循这个约定的。
: 不按这个约定,那就是自己山寨了一个“字符串”,或者不叫字符串,而只是一个char array。
: ...................
--
FROM 111.193.230.*
首先这个数组在C程序里没有存在的意义。
其次,既然是数组,那用户自己应该知道它的长度。如果不知道长度,又不知道结尾的标志,难么,没人能计算它的长度
【 在 sqsl 的大作中提到: 】
:
: 数组内任何位置都可能出现数量不定的\0
: 比如:
: char arr[] = {'a', '\0', '\0', 'd', '\0'};
:
--
FROM 223.101.194.*
C的动态数组有两种,一种在堆上,就是malloc得到的,一种在栈上 char a[x];
【 在 sqsl 的大作中提到: 】
: 对,我问的是字符数组的情况,字符串中间不会有\0
: 您说的动态数组指的是malloc之类的库函数生成的数组嘛?
:
--
FROM 61.48.130.*
收到,谢谢
【 在 z16166 的大作中提到: 】
: C的动态数组有两种,一种在堆上,就是malloc得到的,一种在栈上 char a[x];
--
FROM 111.193.230.*
应该也可以,sizeof可以计算出来
【 在 e729 的大作中提到: 】
: 首先这个数组在C程序里没有存在的意义。
: 其次,既然是数组,那用户自己应该知道它的长度。如果不知道长度,又不知道结尾的标志,难么,没人能计算它的长度
--
FROM 111.193.230.*