我正在尝试在C中使用字符串输入,我同时尝试了scanf
和fgets
。然而,正在发生的一件奇怪的事情是,当我在第一个字符串中输入大量输入,然后按Enter并输入第二个字符串时,第二个字符串将替换第一个字符串末尾的字符。 fgets
和scanf
都会发生这种情况。我做错了什么?
这是代码
#include <stdio.h>
#include <stdlib.h>
#include <string>
#define MAX_SIZE 10000 // Added in the edit
int main() {
char* str1;
char* str2;
char* deleted;
int len1, len2;
str1 = (char*)(malloc(sizeof(MAX_SIZE)));
str2 = (char*)(malloc(sizeof(MAX_SIZE)));
deleted = (char*)(malloc(sizeof(MAX_SIZE)));
fgets (str1, MAX_SIZE, stdin);
fgets (str2, MAX_SIZE, stdin);
printf(" - %s - %d \n", str1, len1);
printf(" - %s - %d \n", str2, len2);
}
这是输出:
$ ./a.out
qwertyuiolkjhgfdsazxcvbnmSTACK
OVERFLOW
- qwertyuiolkjhgfdOVERFLOW <<<<<< The second string gets appended in the first
- 25
- OVERFLOW
- 9
答案 0 :(得分:1)
给定#define MAX_SIZE 10000
然后
str1 = (char*)(malloc(sizeof(MAX_SIZE)));
//&lt; - 错误
您需要的是:
str1 = malloc(MAX_SIZE * sizeof(char));
此外,您拥有从未使用过的deleted
变量。
请记住,fgets
最后有\n
,通常使用strcspn
(Removing trailing newline character from fgets() input)
str1[strcspn(str1, "\n")] = 0;
最后,您正在使用len1
,len2
完全未初始化,这会导致未定义的行为。你需要的是:
printf(" - %s - %zu \n", str1, strlen(str1));