gpt4 book ai didi

c - 程序输出退出短语而不是存储在 C 中的单词

转载 作者:行者123 更新时间:2023-11-30 14:40:51 25 4
gpt4 key购买 nike

所以我正在为学校做一项作业,并编写了此代码的变体:

#include <stdio.h>
#include <ctype.h>
#include <string.h>
#define MAX 100

// This program takes an input of strings and prints them out with a new line separating each one.

int main() {
char *WordArray[MAX]; //initializing variables
int i = 0;
int count = 0;

printf("enter up to 100 words, that are 20 characters maximum \n");

for (i = 0; i <100; i++){ //runs while there's less than 100 inputs
char Array[1];
scanf("%s",Array); //stores string in the array
if (strcmp(Array, "STOP") == 0) { //compares the string with stop, and if it is, it breaks out of the loop
break;
}
WordArray[i]=Array; //stores the string in the pointer array

}
printf("The output is\n");
for (count = 0; count<i; count++){ //counts up to the amount of words stored
printf("%s\n",WordArray[count]); //outputs each pointer string
}
}

我注意到输出打印的是“STOP”而不是存储的值。有人对原因和/或如何解决它有任何答案吗?我知道其中一种方法是切换到二维数组而不是使用指针,但我仍然困惑为什么这样的程序不起作用。

最佳答案

您的 char Array[1]; 不够大,无法存储空字符串以外的任何内容。此外,当它工作时,每个指针都将指向同一个字符串,这将是您所做的最后一个条目。这对评论的地方进行了一些更正。

#include <stdio.h>
#include <stdlib.h> // instead of ctype.h
#include <string.h>

#define MAX 100

// This program takes an input of strings and prints them out with a new line separating each one.

int main() {
char *WordArray[MAX];
int i = 0;
int count = 0;

printf("enter up to 100 words, that are 20 characters maximum \n");

for (i = 0; i <100; i++){
char Array[21]; // increase size of array
scanf("%20s",Array); // limit entry length
if (strcmp(Array, "STOP") == 0) {
break;
}
WordArray[i] = strdup(Array); // allocate memory for and copy string

}
printf("The output is\n");
for (count = 0; count<i; count++){
printf("%s\n",WordArray[count]);
}

// free each string's memory
for (count = 0; count<i; count++){
free(WordArray[count]);
}
}

程序输出:

enter up to 100 words, that are 20 characters maximumone two three STOPThe output isonetwothree
<小时/> 编辑:请注意,除了太短的字符串 char Array[1]之外,您的代码还包含另一个 未定义的行为,即您取消引用您的指针存储在 char *WordArray[MAX]; 中。 Array作用域位于 for 循环内部,理论上在循环完成后不再存在,因此您存储的指针无效。此处,输入的单词与 strdup 重复,因此不适用。

关于c - 程序输出退出短语而不是存储在 C 中的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55326827/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com