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

65 Views Asked by At

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

}
1

There are 1 best solutions below

0
0___________ On BEST ANSWER

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