【问题标题】:Declaring a global CHAR array from shell in C在 C 中从 shell 声明一个全局 CHAR 数组
【发布时间】:2016-11-22 20:45:14
【问题描述】:

我在 C 中的全局变量有问题。我必须用 C 创建一个字符串数组。字符串的数量将由 shell 传递的参数 (number_of_string = atoi(argv[1])) 确定。所以我认为最好的方法是使用number_of_strings 指针数组。这个数组的每一个元素都将指向一个用malloc动态保留的内存部分。主要问题是我需要在执行 main (argv[1] 还不存在)之前将数组的大小定义为全局变量。我不知道我该如何解决这个问题。谁能帮帮我?

【问题讨论】:

  • 为什么需要在执行前定义数组的大小?从逻辑的角度来看,如果您只知道运行时字符串的数量,怎么会发生这种情况?定义指针,使用malloc分配字符串指针。
  • char **stringsstrings = malloc(sizeof(char*)*atoi(argv[1])); 每个string[x] 都是malloc(sizeof(char)*<the_length_of_the_string_to_store>); 的结果。如果出于某种原因,您希望它是全局的,只需将 char **strings 定义为全局即可。然后按照前面在 main() 或任何适当的地方所述进行初始化。
  • 这是一种并发练习。我必须创建一个循环缓冲区,在其中存储一些由用户确定的字符串(通过 shell 传递数字)。这是完成程序所缺少的部分。
  • 如果是循环缓冲区,那就另当别论了。这意味着,如果字符串的数量超过缓冲区规定的最大值,则添加的第一个字符串将被最新的字符串覆盖。
  • 是的,但这不是问题所在。与循环缓冲区有关的所有事情都已经通过使用信号量解决了。

标签: c arrays shell concurrency global-variables


【解决方案1】:

这能解决您的问题吗?

#include <stdlib.h>

char **strings;

int main(int argc, char **argv)
{
    int size;
    int i;
    if ( argc < 2 )
        return 1;

    size = atoi(argv[1]);

    if ( size <= 0 )
        return 2;

    strings = malloc(sizeof(char*)*size);

    for ( i = 0 ; i < size ; i++ ) {
        strings[i] = malloc(sizeof(char)*100);
    }

    // You now have argv[1] 100-byte strings (don't forget about NULL terminators)
}

【讨论】:

  • 别忘了释放它们。
猜你喜欢
  • 1970-01-01
  • 2012-10-04
  • 1970-01-01
  • 1970-01-01
  • 2012-03-06
  • 1970-01-01
  • 1970-01-01
  • 2014-02-02
  • 2012-03-30
相关资源
最近更新 更多