这是一个非常基本的问题,但我无法通过谷歌找到任何相关信息。 所以让我们说主函数传递一些输入字符串。我正在尝试
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
}
这是如此基本......但我很无能为力。
答案 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;在末尾!