c语言,对于strlen的疑惑

问题

我想要使用指针来输入输出字符串,并计算每个字符ascaii码相加的数值

代码
#include
#include
int main()
{
    char *str1;
    int checksum=0;
    gets(str1);
  
  for(int i=0;i<strlen(str1);i++)
  {
    checksum += str1[i];
  }

  puts(str1);

    return 0;
}
运行结果及报错内容

程序没有报错,但并没有输出想要的结果,程序什么有没有输出。

尝试过的方法

然后我觉得是for循环里判断出了问题。
我把代码改成下面这样,把strlen(str1),拿出来后程序输出了正常的结果。

#include
#include
int main()
{
    char *str1;
    int checksum=0;
  gets(str1);
  
  int cnt = strlen(str1);
  for(int i=0;iputs(str1);
  printf("%d",checksum);
    return 0;
}
疑问

请问这是为什么呢?strlen返回size_t类型是非负的,i为0也是非负的,好像也不存在类型转换时发生的错误啊。

定义的指针类型不能这样用吧,你定义这种char str1[100] = {0}; 可以直接来用。
char *str1;这种还没分配地址空间的不能直接用