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

如何在C语言循环的每次迭代中创建形如str_1的新变量?

在C语言循环中实现类似str_1、str_2的“动态变量”效果

兄弟,我懂你想在循环里创建str_1、str_2这种带编号变量的需求,但C语言里其实没法直接这么干——因为变量名是编译时就确定好的,运行时没法动态生成新的变量名。不过别担心,我们可以用数组或者动态分配的指针数组来实现类似的效果,本质上就是用数组索引来代替变量名里的编号。

下面给你两种实用的解决方案:

方案一:固定大小的二维字符数组

适合你提前知道最多要处理多少个字符串,以及每个字符串最长多少字符的场景,实现起来简单直接:

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

#define MAX_STRINGS 100  // 设定最多处理100个字符串
#define MAX_LENGTH 20    // 每个字符串最长允许20个字符

int main() {
    int i, N;
    // 二维数组,str_arr[i]就等价于你想要的str_{i+1}
    char str_arr[MAX_STRINGS][MAX_LENGTH];

    printf("enter the n. of string you want to be processed=");
    scanf("%d", &N);
    
    // 先做边界检查,避免数组越界
    if (N > MAX_STRINGS) {
        printf("Error: Too many strings, maximum allowed is %d\n", MAX_STRINGS);
        return 1;
    }

    for (i = 0; i < N; i++) {
        printf("Enter string %d: ", i+1);
        scanf("%s", str_arr[i]);  // 直接将输入存入数组对应位置
        printf("You entered: %s\n", str_arr[i]);
    }

    // 后续访问示例:str_1对应str_arr[0],str_2对应str_arr[1]
    printf("\nAll stored strings:\n");
    for (i = 0; i < N; i++) {
        printf("str_%d: %s\n", i+1, str_arr[i]);
    }

    return 0;
}

方案二:动态分配的指针数组(更灵活)

如果不确定要处理的字符串数量,或者字符串长度可能很长,用动态分配会更灵活,不会浪费内存:

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

int main() {
    int i, N;
    char **str_arr;  // 指针数组,每个元素指向一个独立的字符串

    printf("enter the n. of string you want to be processed=");
    scanf("%d", &N);

    // 先分配存储N个字符串指针的空间
    str_arr = (char **)malloc(N * sizeof(char *));
    if (str_arr == NULL) {
        printf("Memory allocation failed!\n");
        return 1;
    }

    for (i = 0; i < N; i++) {
        char temp[100];  // 临时存储输入的字符串
        printf("Enter string %d: ", i+1);
        scanf("%s", temp);
        
        // 为当前字符串分配恰好足够的内存(+1是为了存储字符串结束符'\0')
        str_arr[i] = (char *)malloc(strlen(temp) + 1);
        if (str_arr[i] == NULL) {
            printf("Memory allocation failed for string %d!\n", i+1);
            return 1;
        }
        
        // 将临时字符串复制到分配好的内存中
        strcpy(str_arr[i], temp);
        printf("You entered: %s\n", str_arr[i]);
    }

    // 访问示例
    printf("\nAll stored strings:\n");
    for (i = 0; i < N; i++) {
        printf("str_%d: %s\n", i+1, str_arr[i]);
    }

    // 重要:记得释放动态分配的内存,避免内存泄漏
    for (i = 0; i < N; i++) {
        free(str_arr[i]);
    }
    free(str_arr);

    return 0;
}

核心思路总结

C语言不支持运行时动态生成变量名,但我们可以用数组的索引来模拟变量名中的编号:比如str_arr[0]对应str_1,str_arr[1]对应str_2,以此类推。这是C语言中实现这类需求的标准做法,既高效又易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 15:13:10