弯吐岁踢 2022-11-26 13:41 采纳率: 0%
浏览 1

c语言,对于strlen的疑惑

问题

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

代码
#include<stdio.h>
#include<string.h>
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<stdio.h>
#include<string.h>
int main()
{
    char *str1;
    int checksum=0;
  gets(str1);
  
  int cnt = strlen(str1);
  for(int i=0;i<cnt;i++)
  {
    checksum += str1[i];
  }
  puts(str1);
  printf("%d",checksum);
    return 0;
}
疑问

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

  • 写回答

2条回答 默认 最新

  • 我系真滴菜 2022-11-26 14:17
    关注

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

    评论

报告相同问题?

问题事件

  • 创建了问题 11月26日