Я пытаюсь посчитать содержимое в массиве char до нулевого завершения, но каждый раз, когда я компилирую, я получаю число больше моего массива - PullRequest
0 голосов
/ 01 мая 2019

Независимо от того, какое значение я установил для размера моего массива, функция, которую я написал, возвращает значение на несколько градусов больше.

Я пробовал, в то время как (* str ++) и удаляя str ++ изнутрицикл while, а не то, что есть сейчас.

Я использую Visual Studio 2019.

int strlen(char* str)
{
    int i = 0;

    while (*str != '\0')
    {
        i++;
        str++;

    }

    return i;
}

int main()
{
    char line[1];
    char* v = line;
    char* s = new char[1];
    cout << "for s " << strlen(s) << endl;
    cout << "for v " << strlen(v) << endl;

}

Ответы [ 2 ]

3 голосов
/ 01 мая 2019

Вы пренебрегаете нулевым завершением своих строк.Ваша функция выполняет итерацию за концом массива и вызывает неопределенное поведение.Некоторые функции манипуляции со строками помещают нулевое значение в конец, но если вы хотите, чтобы ваша строка имела нулевой терминал, вы должны поместить его туда самостоятельно.

char line[2];
char* v = line;
line[0]='x';
line[1]= '\0';
2 голосов
/ 01 мая 2019

Содержимое ваших массивов не определено.Вы не заполняете какие-либо массивы какими-либо символами, не говоря уже о нулевых терминаторах. неопределенное поведение - вызывать strlen() для массива символов, который не завершается должным образом нулем.

...