scanf问题,VS异常

问题遇到的现象和发生背景

字符逆序
将一个字符串str的内容颠倒过来,并输出。str的长度不超过100个字符。
输入包括一行。 第一行输入的字符串
输出转换好的逆序字符串。

问题相关代码,请勿粘贴截图

#include"stdio.h"
#include"string.h"
int main() {
char str1[100];
char str2[100];
scanf_s("%[^\n]", str1);
int i = 0;
int j = 0;
int len = strlen(str1);
for (i = len-1; i >= 0; i--) {
str2[j++] = str1[i];
}
str2[j] = '\0';

printf("%s\n", str2[j]);


return 0;

}

img

运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

img


出错原因,解决方案

scanf_s后面必须要有大小参数。printf("%s\n", str2[j])里打印的是char字符'\0',应该删掉[j]。


#include<stdio.h>
#include<string.h>
int main() {
    int i = 0;
    int j = 0;
    int len;
    char str1[100];
    char str2[100] = {0};
    scanf_s("%[^\n]", str1,100);
    len = strlen(str1);
    for (i = len - 1; i >= 0; i--)
        str2[j++] = str1[i];
    printf("%s\n", str2);
    return 0;
}

我去试试
要不你换个声明数组的方法?就用
charstr1=(char)malloc(sizeof(char)*100);来声明,要记得加头文件stdlib.h

修改这两个地方:
scanf("%[^\n]", str1);
printf("%s\n", str2);
另外在头文件后加上 #pragma warning(disable:4996) 皆可以使用scanf函数了。

输入那行改成

scanf_s("%s",str1);