cfor-loopvariable-declaration

my variable resetting after one loop in a for loop, not sure why


i have been trying to make a for loop where at i < j. Variable J takes the length of a string to decide how many loops will happen. This works for the first loop, i have debugged and J does get the value of 3 if i put in a string of 3 characters. The problem is that after the first loop J is reset to the value of 0 and i cant seem to figure out why that is. Can anyone help me? Id still call myself a beginner so any advice on code would be appreciated even if its not about my specific question.

#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);

}

Solution

  • char word\[\] = ""; I belive that it is typo and it should be

    char word[] = "";
    

    You define a char array having one element (null terminating character). When you strcat(word, "p"); you invoke undefined behaviour as you write outside the array bounds. Your array has to be big enough to accommodate all the characters and null terminating character.

    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