C语言 我的变量在for循环中的一次循环后重置,不知道为什么

1l5u6lss  于 2023-08-03  发布在  其他
关注(0)|答案(1)|浏览(102)

我一直在尝试做一个for循环,其中在i <j。变量J采用字符串的长度来决定将发生多少次循环。这适用于第一个循环,我已经调试过了,如果我输入一个3个字符的字符串,J确实得到了3的值。问题是,在第一次循环后,J被重置为0的值,我似乎无法弄清楚为什么会这样。有人能帮帮我吗?我仍然称自己是一个初学者,所以任何关于代码的建议都将受到赞赏,即使它不是关于我的具体问题。

#include <ctype.h>
#include <cs50.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(void)
{
string prompt = get_string("Give me a word: " );
int j = strlen(prompt);
char word[] = "";

    for (int i = 0; i < j; i++)
    {
        strcat(word, "p");
    }
    
    printf("%s\n", word);

}

字符串

s8vozzvw

s8vozzvw1#

char word\[\] = "";我相信这是错字,它应该是

char word[] = "";

字符串
您定义了一个char数组,它有一个元素(空终止字符)。当你strcat(word, "p");你调用undefined behavior当你写数组边界外。你的数组必须足够大,以容纳所有的字符和空终止字符。

int main(void)
{
    string prompt = get_string("Give me a word: " );
    size_t j = strlen(prompt);
    char word[j + 1];

    word[0] = '\0';

    for (int i = 0; j != 0 && i < j; i++)
    {
        strcat(word, "p");
    }
    
    printf("%s\n", word);

}


https://godbolt.org/z/5GPPse96K

相关问题