You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

定义char str[100]时scanf传入&str不生效,求语法问题排查

代码存在的问题及修复方案

问题列表

  • length函数变量未初始化:自定义length函数中,局部变量len声明后未赋值为0,初始值为内存随机值,导致字符串长度计算逻辑完全错误。硬编码字符串时运行正常属于巧合,刚好栈内存中len初始值为0,改用scanf输入后栈内存布局变化,逻辑就会失效。
  • scanf参数用法错误:main函数中scanf("%s",&str);写法错误,数组名str本身已经是字符数组的首地址,不需要额外加取地址符&。
  • 存在缓冲区溢出风险:%s不限制输入长度时,若输入字符超过99个会超出str数组的存储范围,触发栈溢出漏洞。

修复后的完整代码

#include<stdio.h>

// 查找字符串中的重复字母
int length(char str[]) // 计算字符串长度
{
    int len = 0; // 初始化len为0
    while(str[len]!='\0')
    {
        len++;
    }
    return len;
}
void duplicate(char str[],int n)
{
    int i,j,flag;
    for(i=0;i<=n-2;i++) // 选中要比较的字符
    {
        flag=0;
        if(str[i]!='\0')
        {
            for(j=i+1;j<=n-1;j++) // 遍历后续字符对比
            {
                if(str[j]==str[i])
                {
                    flag=1;
                    str[j]=0;
                }
            }
            if(flag==1)
            {
                printf("%c 是重复字符\n",str[i]);
            }
        }
    }
}
int main()
{
    char str[100];
    scanf("%99s",str); // 修正scanf写法,限制输入长度
    int n= length(str);
    duplicate(str,n);
    return 0;
}

内容的提问来源于stack exchange,提问作者Vedant Taak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 00:36:02