【问题标题】:how can i make a loop in which each time new variable can be made on each processing of loop我如何制作一个循环,其中每次处理循环时都可以制作新变量
【发布时间】:2020-07-19 07:56:13
【问题描述】:

所以我正在做一些问题练习,我需要在循环的每个处理上创建一个新变量,比如 (str_i) 其中 (i) 将给出 1,2,3...

#include <stdio.h>
#include <string.h>
#include <math.h>
int main()
    {
        int i,M,N;
        char a[20];
        printf("enter the n. of string you want to be processed=");
        scanf("%d",&N);


        char str;
        for (i=1;i<=N;i++)
            {
                scanf("%s",a);
                printf("%s \n",a);
                /*Now here i want to create a new variable for 
                each iteration like str_1,str_2..... and so on*/

            }


    }

【问题讨论】:

  • 您知道malloc() 并使用指针数组吗?
  • "别当真" - 如果我们不认真,那我们怎么能写出认真的答案呢?
  • 实际上不,我不知道,甚至我也没有得到下面给出的答案....只是等待任何另一个好的答案..这可能对我有帮助..跨度>
  • 我想说我写的代码在任何情况下都不适用于我的问题,但我写它只是为了给读者一个我想知道的想法......因为你知道仅供参考..这就是为什么我写“不要当真”。
  • 您的示例要求用户输入多个字符串,但是既然数量是固定的,那么为什么需要在每次迭代中创建一个新的变量/存储位置呢?我猜这个例子有点缺陷。

标签: c loops variables variable-declaration


【解决方案1】:

这叫数组:既然你已经提前知道循环运行的次数,你可以提前创建一个固定大小的数组,然后填充到循环中:

char **str = malloc(sizeof(*str) * N);

如果要读入字符串,每次迭代都要预留额外的存储空间

str[i] = malloc(strlen(a) + 1);

并将缓冲区a中的内容复制到:

strcpy(str[i], a);

由于您的缓冲区只有 20 个字节长,您还应该将输入限制为 19 个字符(最后一个零字符需要 1 个字节):

scanf("%19s", a);

否则会导致缓冲区溢出。

【讨论】:

  • 您在代码中显示的不是数组。你只是一个像数组一样的分配内存。
  • str[i] = malloc(strlen(a)); 是错误的。它应该是str[i] = malloc(strlen(a)+1);,以便分配终止空字符。
  • char *str = malloc(sizeof(char*) * N); 也是错误的。它应该是char **str = malloc(sizeof(char*) * N);,以便将指针存储为数组的元素。
  • 内存应该是静态分配的还是从堆栈中调用的?动态数组也是先分配的。
  • char **str = malloc(sizeof(char*) * N); 被认为是一种不好的做法。应该是 char **str = malloc(sizeof(*str) * N);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-13
  • 2019-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多