计算数组长度(sizeof str/sizeof(char))won';行不通

计算数组长度(sizeof str/sizeof(char))won';行不通,c,arrays,string,sizeof,C,Arrays,String,Sizeof,函数getStringEnd()不能正常工作,但我不知道为什么。函数不返回字符串结束的正确值。我已经发现变量max的计算不正确 但是 int max=sizeof str/sizeof(char) 应该有用,不是吗 你有什么想法吗 #include <stdio.h> #define MAX_FIGURES 30 int getStringEnd(const char * str); int getStringEnd(const char * str) { int m

函数
getStringEnd()
不能正常工作,但我不知道为什么。函数不返回字符串结束的正确值。我已经发现变量
max
的计算不正确

但是
int max=sizeof str/sizeof(char)
应该有用,不是吗

你有什么想法吗

#include <stdio.h>
#define MAX_FIGURES 30  

int getStringEnd(const char * str);

int getStringEnd(const char * str)
{
    int max = sizeof str / sizeof (char);

    int counter = 0;
    while (counter <= max -1)
    {
        if ((str[counter] == '\0') || (str[counter] == '\n')) return counter;
        counter += 1;
    }
    return 0;
}

int main(void)
{
    char figures[MAX_FIGURES];
    for (int i = 0; i <= MAX_FIGURES - 1; i++) figures[i] = '\0';

    fgets(figures, MAX_FIGURES, stdin);

    int stringEnd = getStringEnd(&figures);
}
#包括
#定义MAX_图30
int getStringEnd(常量字符*str);
int getStringEnd(常量字符*str)
{
int max=sizeof str/sizeof(char);
int计数器=0;
而(counter在
getStringEnd()
函数中,
str
是一个
const char*
,除此之外没有其他任何内容。
sizeof
运算符返回数据类型的大小,而不是变量所指的内存量

您需要使用来获取字符串的长度

int max = strlen(str); // sizeof(char) == 1, fixed, can be ommitted
注意:FWIW,请记住,
strlen()
不考虑终止null。

getStringEnd()
函数中,
str
是一个
const char*
,其他什么都没有。
sizeof
运算符返回数据类型的大小,而不是变量所指向的内存量

您需要使用来获取字符串的长度

int max = strlen(str); // sizeof(char) == 1, fixed, can be ommitted

注意:FWIW,记住,
strlen()
没有考虑终止null。

这就解决了问题。我只是想知道为什么我的代码不起作用,我有一本C编程的书,作者使用了数组/array[0]的代码
获取数组的元素。我不明白我的程序的真正问题是什么。@Domi当
数组
类型为
[n]时,这是可能的
。如果是指针,sizeof将不能像您预期的那样工作。这就解决了问题。我只是想知道为什么我的代码不能工作,我有一本C编程书,作者使用了代码sizeof array/array[0]
获取数组的元素。我不明白我的程序的真正问题是什么。@Domi当
数组
类型为
[n]时,这是可能的
。如果是指针,sizeof将无法正常工作。请在任何C FAQ中找到此问题的答案,如。请在任何C FAQ中找到此问题的答案,如。