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

C程序第二次循环后无法正确将用户名拼接到API URL问题排查

问题根因

你的代码存在3个核心错误,直接导致后续循环拼接失败:

  • 循环变量z、a未初始化:C语言局部变量声明时不会自动赋值为0,第一次循环时z可能恰好是随机值0,后续循环时z的初始值远大于UsernameSize,拼接用户名的循环直接不执行,自然不会更新URL后半段
  • fgets读取行时会将行尾的换行符\n一并读入Username,拼接后URL会携带无效换行符,调用接口时会报错
  • 硬编码前缀长度48非常容易出错,后续修改前缀URL时要重新计算长度,维护性极差

修复方案

可以直接用标准库的字符串拼接函数简化逻辑,避免手动操作索引出错,修复后代码如下:

#include <stdio.h>
#include <string.h>

int main() {
    const char API_PREFIX[] = "https://api.1234ng.com/users/profiles/planeraft/";
    char username[255];
    char request[255];
    FILE* usernames_file = fopen("Usernames.text", "r");
    
    // 先判断文件是否打开成功
    if (usernames_file == NULL) {
        printf("无法打开用户名文件\n");
        return 1;
    }
    
    int counter = 0;
    // 循环到读完100条或者文件读完为止
    while (counter < 100 && fgets(username, sizeof(username), usernames_file) != NULL) {
        // 去掉fgets读入的末尾换行符
        size_t len = strlen(username);
        if (len > 0 && username[len -1] == '\n') {
            username[len -1] = '\0';
        }
        // 拼接生成完整请求地址
        snprintf(request, sizeof(request), "%s%s", API_PREFIX, username);
        // 打印结果
        printf("%s\n", request);
        counter++;
    }
    
    fclose(usernames_file);
    return 0;
}

补充说明

  • 用snprintf做字符串拼接,自动处理结尾的\0,不需要手动清空旧的拼接内容,也不会溢出缓冲区
  • 主动去掉用户名末尾的换行符,保证URL合法性
  • 增加文件打开失败判断、文件读取结束判断,避免程序异常崩溃

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:24:01