英文:
my variable resetting after one loop in a for loop, not sure why
问题
我一直在尝试创建一个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("给我一个单词: ");
int j = strlen(prompt);
char word[] = "";
for (int i = 0; i < j; i++)
{
strcat(word, "p");
}
printf("%s\n", word);
}
英文:
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
得分: 3
char word[] = ""; // 这里我认为是拼写错误,应该是
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] = 'word[0] = '\0';
for (int i = 0; j != 0 && i < j; i++)
{
strcat(word, "p");
}
printf("%s\n", word);
';
for (int i = 0; j != 0 && i < j; i++)
{
strcat(word, "p");
}
printf("%s\n", word);
}
https://godbolt.org/z/5GPPse96K
英文:
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] = '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);
}
';
for (int i = 0; j != 0 && i < j; i++)
{
strcat(word, "p");
}
printf("%s\n", word);
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论