C - 用户输入上限为 8 个字符



我正在尝试编写一个可以为用户输入调用的函数,因此我可以随时调用它,并且可以将其分配给变量。 但是,由于某种原因,它似乎将输入限制在 8 个字符,无论它是高于还是低于 8 个字符。

char * userInput(){
char * user_input;
user_input = malloc(sizeof(char)*100);
printf("Type > ");
scanf("%s",user_input);
printf("%ld",sizeof(user_input));
return user_input;
}

输出

键入>是句子

8你好,你是

有问题的陈述是这样的

printf("%ld",sizeof(user_input)); /* It desn't return the number of char stored in user_input  */

由于user_input是一个字符指针,而S izeof 指针在32位机器上始终是4个字节,在 64 位机器上是8个字节

我的建议是使用fgets()而不是scanf().例如

声明字符指针并分配内存。

char * user_input = NULL;
user_input = malloc(sizeof(*user_input) * MAX_BUF_SIZE); /* Instead of magic number use macro */ 

malloc()进行正确的错误处理。例如

if(user_input == NULL) {
fprintf(stderr, "memory allocation failedn");
exit(-1);
}

使用fgets()而不是scanf()扫描输入。

size_t retStrCspn = 0;
if(fgets(user_input, MAX_BUF_SIZE, stdin) != NULL) {
/* fgets success. next task is remove the trailing n char read by fgets() */
user_input[retStrCspn = strcspn(user_input, "n")] = 0; /* remove the trailing & use the return value */
}

现在打印长度,不要用sizeof,用strcspn()的返回值为例

printf("%zu", retStrCspn);

而不是:

printf("%ld",sizeof(user_input));

写:

printf("%ld",strlen(user_input));

请注意,如果在输入中写入超过 99 个字符,程序将表现不佳。

相关内容

  • 没有找到相关文章

最新更新