【发布时间】:2018-10-10 03:54:25
【问题描述】:
在程序开始时,我需要为未知数量的大小未知的字符串动态分配内存,以便以后使用。要从我拥有的用户那里获取字符串的数量:
int main(int argc, char *argv[]){
int number = atoi(argv[1]);
到目前为止一切顺利。 “数字”现在保存用户在命令行上输入的用于执行代码的数字。现在到了我不太明白的部分。我现在需要动态存储字符串的长度以及字符串的内容。例如,我希望程序像这样运行:
Enter the length of string 1: 5
Please enter string 1: hello
Enter the length of string 2: ...
为此,我认识到我必须创建一个字符串数组。但是,我不太明白指针指针的概念以及什么不是。我想要的可能是简化如何实现这一点?
【问题讨论】:
-
你的程序到底需要什么?
-
@AsthaSrivastava 我希望这些字符串稍后比较长度、连接它们、复制它们等,但我对这些东西很熟悉。我只是不知道如果有未知长度的未知数字如何动态分配它们。
-
Enter the length of string 1: 5然后Please enter string 1: hello小心,虽然您可以在 array [5] char 中存储 5 个字符'h''e''l''l''o',它不会是一个 string 字符。 (最后没有 nul-terminating 字符——这需要 6 个字符的存储空间)任何使用包含"hello"的数组作为 string 的尝试都会导致 Undefined Behavior 因为字符串函数疯狂地搜索整个堆栈以寻找 nul-character... -
另外,不要使用
atoi(argv[1])——它提供零错误检查功能(如果argv[1] = "duck"呢?而是使用strtol,它提供可靠的错误处理能力。 -
程序应该做的第一件事是测试
argc以确保用户实际输入了参数。如果没有输入参数,则输出USAGE语句 (fprintf( stderr, (USAGE: %s [numberOfStrings]\n", argv[0] );` 然后调用exit( EXIT_FAILURE )其中exit()和EXIT_FAILURE是发现于stdlib.h
标签: c string dynamic-memory-allocation