C语言 我是否在这里创建了两个单独的指针,或者我是否正确地调用了单个内存地址,即命令?



要指定我的问题,我是在使用函数时直接引用int main中的命令,还是复制它们,然后使用函数引用这些副本?我无法理解c中的指针和字符串。

还有,如果我用一种非常愚蠢的方式做这个错误检查,而你知道如何做得更好,我很乐意得到启发。我来自Python,在很大程度上还在学习C。我目前的目标是写一个非常小的编译器,可以做简单的加法。

#include <stdio.h>
int CompilationErrorChecking(int argc, char *argv[]){
// Check initialy if for at least one argument attatched to Iwa
if (argc < 2 && argc == 1){
printf("Error: No arguments found");
// If the arguments are correct: Iwa_Compiler <FileName>
// Execute, and say the command back to them
} else if (argc <= 2){
printf("%s %sn", argv[0], argv[1]);
// If there are more than 2 arguments, spit error
} else {
printf("Erorr: Too many arguments");
}
return 0;
}
int main(int argc, char *argv[]) {
CompilationErrorChecking(argc, argv);
return 0;
}
int CompilationErrorChecking(int argc, char *argv[]) {
...
}
int main(int argc, char *argv[]) {
CompilationErrorChecking(argc, argv);
...
}

您正确地将argcargv传递给辅助函数。您所写的传递计数argc和指针argv,它们都是便宜的复制,并且不做任何昂贵的字符串复制。(实际上,不小心复制一份昂贵的副本是很难的。您必须显式地调用strcpy()memcpy()或其他类似的函数。)

if (argc < 2 && argc == 1){
printf("Error: No arguments found");
// If the arguments are correct: Iwa_Compiler <FileName>
// Execute, and say the command back to them
} else if (argc <= 2){
printf("%s %sn", argv[0], argv[1]);
// If there are more than 2 arguments, spit error
} else {
printf("Erorr: Too many arguments");
}

虽然我们在这里,值得指出的是这些argc检查是不正确的。对于第一个,您希望在没有参数时出错,当argc < 2argc <= 1(它们是等效的)时发生这种情况。额外的&& argc == 1没有帮助。

对于第二个,您应该检查argc == 2<=具有误导性,因为如果argc小于2,else if块实际上会失败。

首先你是复制的值,因为你正在使用指针。其次,if语句:

if(value<2 && value==1)

你可以把它改成

if(value==1)

最新更新