Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在C中查找字符数组的长度_Arrays_C_Strlen - Fatal编程技术网

Arrays 在C中查找字符数组的长度

Arrays 在C中查找字符数组的长度,arrays,c,strlen,Arrays,C,Strlen,在C语言中,有什么方法可以让人找到字符数组的长度 我很乐意接受伪代码,但如果有人愿意,我并不反对写出来:)只要字符数组null终止 char chararray[10] = { 0 }; size_t len = strlen(chararray); 你说的“字符数组”是指字符串吗?比如“你好”或“哈哈哈,这是一个字符串” 无论如何,使用。阅读一些关于它的信息,有很多关于它的信息,比如。如果你有一个数组,那么你可以通过将数组的字节大小除以每个元素的字节大小来找到数组中的元素数: char x[

在C语言中,有什么方法可以让人找到字符数组的长度


我很乐意接受伪代码,但如果有人愿意,我并不反对写出来:)

只要字符数组
null
终止

char chararray[10] = { 0 };
size_t len = strlen(chararray);
你说的“字符数组”是指字符串吗?比如“你好”或“哈哈哈,这是一个字符串”

无论如何,使用。阅读一些关于它的信息,有很多关于它的信息,比如。

如果你有一个数组,那么你可以通过将数组的字节大小除以每个元素的字节大小来找到数组中的元素数:

char x[10];
int elements_in_x = sizeof(x) / sizeof(x[0]);
对于
char
的特定情况,由于
sizeof(char)==1
sizeof(x)
将产生相同的结果

如果只有指向数组的指针,则无法找到指向数组的元素数。你必须自己记录下来。例如,假设:

char x[10];
char* pointer_to_x = x;
指针指向\ux
无法判断它指向10个元素的数组。你必须自己跟踪这些信息

有很多方法可以做到这一点:您可以将元素的数量存储在变量中,也可以对数组的内容进行编码,以便通过分析其内容以某种方式获得其大小(这实际上就是以null结尾的字符串所做的:它们在字符串末尾放置一个
'\0'
字符,以便您知道字符串何时结束)。

您可以使用strlen

strlen(urarray);
您可以自己编写代码,以便了解其工作原理

size_t my_strlen(const char *str)
{
  size_t i;

  for (i = 0; str[i]; i++);
  return i;
}
如果需要数组的大小,则使用sizeof

char urarray[255];
printf("%zu", sizeof(urarray));

如果您想要字符数组的长度,请使用
sizeof(array)/sizeof(array[0])
,如果您想要字符串的长度,请使用
strlen(array)

尽管前面的答案是可以的,但这里是我的贡献

//returns the size of a character array using a pointer to the first element of the character array
int size(char *ptr)
{
    //variable used to access the subsequent array elements.
    int offset = 0;
    //variable that counts the number of elements in your array
    int count = 0;

    //While loop that tests whether the end of the array has been reached
    while (*(ptr + offset) != '\0')
    {
        //increment the count variable
        ++count;
        //advance to the next element of the array
        ++offset;
    }
    //return the size of the array
    return count;
}
在main函数中,通过传递数组第一个元素的地址来调用size函数

例如:

char myArray[] = {'h', 'e', 'l', 'l', 'o'};
printf("The size of my character array is: %d\n", size(&myArray[0]));

如果您不想依赖strlen,也有一种紧凑的形式。假设您考虑的字符数组是“msg”:

使用sizeof()

使用string.h


您可以使用此功能:

int arraySize(char array[])
{
    int cont = 0;
    for (int i = 0; array[i] != 0; i++)
            cont++;
    return cont;
}

你的意思是除了寻找NUL之外?要么
strlen()
,要么
sizeof()
。这取决于你需要什么。字符串是存储在字符数组中的特定类型的对象(字符数组可能不包含字符串)@pst:这个问题非常模糊,我们可以随意解释。我们的解释是否正确取决于提问者决定返回的内容。@pst考虑到OP提出问题的方式,我们有权假设任何内容。如果是文字或
char[#]
,您可以使用
sizeof
,但请注意不要尝试在
char*
上使用它。如果您确实使用
sizeof
,请不要忘记为空终止符减去1。@dan04:仅当数组初始化为隐式长度,如
char s[]=“sup”
sizeof()
asnd
strlen
两者都返回
size\u t
,这与
int
的不同之处在于它可能更大或更小,并且肯定是无符号的。这应该是可以接受的答案。它将返回初始化数组的大小。
sizeof()
asnd
strlen()
两者都返回
size\u t
,这与
int
的不同之处在于它可能更大或更小,并且肯定是无符号的。请注意,在给出的示例中,strlen(chararray)返回0,因为数组是空的。任何
strlen()
都应该返回
size\u t
(无符号)而不是
int
(有符号)。而
printf()
size\u t
说明符是
“%zu”
(或
“%zx”
“%zo”
表示十六进制或八进制)。当您可以简单地使用count时,为什么要为偏移量指定一个单独的变量?这里有一个较短(但更难理解)的版本:
int strlen(const char*pStr){int i=0;while(*pStr){++i;}返回i;}
char myArray[]={'h',e',l',l',o'};不会自动以'\0'结尾。您需要手动将'\0'分配给myArray。myArray[6]='\0';至少在我的MacOS.g++4.2.1上,Apple LLVM版本9.1.0(clang-902.0.39.2)如果您使用char myArray[]='hello',则代码正常工作。
char h[] = "hello";
printf("%d\n",sizeof(h)-1); //Output = 5
#include <string.h>

char h[] = "hello";
printf("%d\n",strlen(h)); //Output = 5
int strsize(const char* str);
int main(){
    char h[] = "hello";
    printf("%d\n",strsize(h)); //Output = 5
    return 0;
}
int strsize(const char* str){
    return (*str) ? strsize(++str) + 1 : 0;
}
int arraySize(char array[])
{
    int cont = 0;
    for (int i = 0; array[i] != 0; i++)
            cont++;
    return cont;
}