在c中输入字符串以及如何将字符串存储到变量中

时间:2014-12-14 23:53:49

标签: c string input c-strings

这是一个非常基本的问题,但我无法通过谷歌找到任何相关信息。 所以让我们说主函数传递一些输入字符串。我正在尝试

main(argc, const char* argv[]) {
   char* test = argv[1]; // works but gives error if not at beginning of function

   char* test2;
   test2 = argv[2]; // error: invalid casting from const type

   char* test3;
   strcpy(test3, argv[3]); // run-time failure

   char test4[10];
   strcpy(test4, argv[4]); // works but what if the input string's length cannot be guaranteed
}

这是如此基本......但我很无能为力。

2 个答案:

答案 0 :(得分:1)

由于您提到它是伪代码,我无法帮助您修复代码。 您必须为测试变量分配内存,或者使用适合您输入的长度对其进行初始化。

答案 1 :(得分:1)

在c中,字符串是指向某个内存块的指针,每个内存块包含一个字符。说我有以下代码:

char * helloString = "hello"

一旦运行,存储在helloString中的所有就是字符' h'中内存的位置。存储器中接下来的5个位置包含代表'' l',l',' o'和' \ 0'最后一个是一个名为NULL的特殊字符,它告诉c字符串结尾的位置。

为了在运行时复制字符串,必须首先分配一些内存来放置字符,然后将它们复制到新内存中。在您的示例中strcpy失败的原因是没有为您的程序分配内存以将字符复制到其中。你需要做这样的事情:

int len = strlen(argv[1]);
char test[len]; //or char * test = malloc(len);
strcpy(argv[1], test);

但是请注意,如果argv [1]没有' \ 0&#,此代码将执行非常坏事(如果你很幸运则会出现错误) 39;在末尾!