c-如何使用scanf_s()读取输入,然后将数据分配给新分配的内存



我试图将用户输入分配给我分配的一块内存,然后将其打印在屏幕上,但在输入完成后,程序就崩溃了

#include <stdio.h>
#include <stdlib.h>
main() {
char *movie;
movie = (char*)malloc(80 * sizeof(char));
if (movie != NULL)
printf("Enter favorite movie: ");
scanf_s("%s",movie);
printf("You entered : %s", movie);
system("pause");
}

如果我使用gets((之类的东西,该程序就可以工作,但我特别需要使用scanf_s((,这就是问题发生的地方。我使用的是VS2019

if块周围缺少{}的代码的主要问题。其他小问题:

  1. main()的签名应该是int main(void)或(int main(int, char **)(
  2. 不要投射void *
  3. sizeof(char)定义为1,因此您并不真正需要sizeof
  4. 使用魔术值的定义整数
  5. scanf_s是微软的扩展,所以我不能为你测试,但我认为你想包括尺寸
  6. 使用getchar((/getc(stdin(,而不是依赖于操作系统(在本例中为dos/windows(的系统("暂停"(
  7. 即使操作系统为您提供了空闲分配内存,这也是一种很好的做法。如果使用内存泄漏检查器,这将使其感到高兴
  8. 返回退出代码
#include <stdio.h>
#include <stdlib.h>
#define LEN 79
#define stringify(s) stringify2(s)
#define stringify2(s) #s
int main(void) {
char *movie = malloc(LEN+1);
if (movie) {
printf("Enter favorite movie: ");
scanf_s("%" stringify(LEN) "s", movie, LEN+1);
printf("You entered : %sn", movie);
}
getchar();
free(movie);
return 0;
}

最新更新