我是C族新手,所以请放轻松!
我正在尝试从命令行参数中获取一个数字,并将其用于整个代码的多次计算中。在命令行中输入的数字显然会以字符串形式返回,因此我正尝试转换为数字,以避免使用char产生的所有计算错误。
我还没有教过atoi或stdlib.h,所以甚至不确定这是我应该如何解决的问题,但这是我找到将字符串转换为数字的唯一方法。
当我将新变量声明为= atoi(argv [1])时;并打印以确认一切正常。
然后我的代码执行其他一些看似无关的操作,当我再次打印变量时,该值为0。我不明白为什么当我不重新声明该变量时该值正在更改,但这意味着随后的任何计算都不会工作。任何想法我做错了吗?
编辑:如果我直接将'key'声明为整数,则程序没有问题,当我尝试从数组中提取整数时,问题就来了。 {位于main()之后,但不会在帖子中格式化。
int main(int argc, string argv[])
string msg[0];
int key = atoi(argv[1]);
if (argc != 2)
{
printf("This function requires one command line argument: key\n");
return 1;
}
if (key < 1)
{
printf("error\n");
return 1;
}
//at this point variable 'key' is ok and equals the value entered in command line
msg[0] = get_string("text:");
int n = strlen(msg[0]); //after this point variable 'key' value is 0 unless I redeclare it
问题是您在msg
数组的边界之外编写。
string msg[0];
声明一个没有元素的数组。因此,分配给任何元素都会在其外部写入,从而导致未定义的行为。当您分配
时会发生这种情况msg[0] = get_string("text:");
您需要使用要存储在其中的元素的实际最大数量来声明该数组。如果您声明为
string msg[10];
您可以通过msg[0]
分配给msg[9]
。