我尝试使用 gets() 和 strcmp 来将用户输入字符串与函数内部的示例进行比较。
我已经尝试过这段代码:
#include <stdio.h>
#include <string.h>
int main() {
// example string
char userName[30] = "Alice Jane";
// string for storing user input
char userInput[30];
printf("Enter your text:\n");
fgets(userInput, 30, stdin);
printf("Your text is: %s\n", userInput);
printf("Real text is: %s\n", userName);
int strComparing = strcmp(userName, userInput);
if (strComparing == 0) {
printf("Strings are equal\n");
} else {
printf("Strings are not equal, difference is %d\n", strComparing);
}
printf("Username size is %lu\n", sizeof(userName));
printf("Inputed username size is %lu\n", sizeof(userInput));
int i, j;
// printing example string
for (i = 0; i < 30; i++) {
printf("%d ", userName[i]);
}
printf("\nBreak between arrays\n");
// printing user inputted string, here happens something wierd
for (j=0; j < 30; j++) {
printf("%d ", userInput[j]);
}
}
结果:
Enter your text:
Alice Jane
Your text is: Alice Jane
Real text is: Alice Jane
Strings are not equal, difference is -32
Username size is 30
Inputed username size is 30
65 108 105 99 101 32 74 97 110 101 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Break between arrays
65 108 105 99 101 32 74 97 110 101 32 0 0 0 16 89 94 2 1 0 0 0 24 93 94 2 1 0 0 0
一切顺利,但比较时,字符串不相等。当尝试打印数组时,我在用户输入数组中看到一些奇怪的东西:
65 108 105 99 101 32 74 97 110 101 32 10 0 0 16 -103 84 0 1 0 0 0 24 -99 84 0 1 0 0 0
但是示例数组很好,ascii 编码的“Alice Jane”短语:
65 108 105 99 101 32 74 97 110 101 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
这里出了什么问题以及如何处理?为什么用户输入的数组中充满了意想不到的符号?
fgets(userInput, 30, stdin);
问题是
fgets()
在缓冲区中添加换行符,假设有空间。在尝试比较之前,您必须先将其剥离。最简单的方法是:
#include <string.h>
userInput[strcspn(userInput, "\n")] = '\0';