计算数组长度(sizeof str / sizeof(char))将不起作用

时间:2015-04-16 11:07:54

标签: 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 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);
}

1 个答案:

答案 0 :(得分:6)

getStringEnd()函数中,strconst char *,没有别的。 sizeof运算符返回数据类型的大小,而不是指向变量的内存量。

您需要使用strlen()来获取字符串的长度。你需要写一些像

这样的东西
int max = strlen(str); // sizeof(char) == 1, fixed, can be ommitted

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