假设我有一系列字符。说char x [100]
现在,我从用户那里获取输入并将其存储在char数组中。用户输入少于100个字符。现在,如果我想对有效值进行一些操作,我如何找到char数组中有多少有效值。是否有C函数或某种方法来查找有效值的实际长度,在这种情况下将小于100。
答案 0 :(得分:10)
是的,C有函数strlen()
(来自string.h),它给出了char数组中的字符数。怎么知道这个?根据定义,每个C“字符串”必须以空字符结尾。如果没有,你无法知道字符串有多长,或者换句话说,数组的哪些内存位置的值实际上是“有用的”,哪些只是一些转储。知道了这一点,sizeof(your_string)
返回数组的大小(以字节为单位),而不是字符串的长度。
幸运的是,大多数创建“字符串”或读取输入并将其存储到char数组中的C库字符串函数将自动在末尾附加空字符以终止“字符串”。有些人没有(例如strncpy()
)。请务必仔细阅读其说明。
另外,请注意,这意味着提供的缓冲区必须至少比指定的输入长度长一个字符。因此,在您的情况下,您必须实际提供长度为101的char数组以100个字符读取(一个字节的差异用于空字符)。
使用示例:
#include <stdio.h>
#include <string.h>
int main(void)
{
char *string = "Hello World";
printf("%lu\n", (unsigned long)strlen(string));
return 0;
}
strlen()定义为:
size_t strlen(const char * str)
{
const char *s;
for (s = str; *s; ++s);
return(s - str);
}
如您所见,通过搜索数组中的第一个null character找到字符串的结尾。
答案 1 :(得分:1)
这完全取决于你获得输入的地方。很可能strlen
会做到这一点。
答案 2 :(得分:0)
每次在数组中输入一个带有空字符的字符串。你只需要找到数组中空字符的位置。
您可以手动执行此操作,否则 strlen()将解决您的问题。
答案 3 :(得分:-1)
char ch;
int len;
while((ch = getche())!='13')
{
LEN ++;
}
或通过%s
从char转换为字符串后使用strlen