为什么我的阵列打印的数字与分配过程中打印的数字不同?

时间:2015-08-08 15:26:58

标签: c arrays output

我使用字符的ASCII值来执行此操作:PHP Warning: ftp_login(): Not logged in. in /var/www/html/vendgto/app/Arifulhb/Command/Gto.php on line 82 PHP Stack trace: PHP 1. {main}() /var/www/html/vendgto/index.php:0 PHP 2. Arifulhb\Command\Gto->transferToServer() /var/www/html/vendgto/index.php:26 PHP 3. ftp_login() /var/www/html/vendgto/app/Arifulhb/Command/Gto.php:82 Warning: ftp_login(): Not logged in. in /var/www/html/vendgto/app/Arifulhb/Command/Gto.php on line 82 Call Stack: 0.0014 223184 1. {main}() /var/www/html/vendgto/index.php:0 0.2718 3132328 2. Arifulhb\Command\Gto->transferToServer() /var/www/html/vendgto/index.php:26 5.7247 3227584 3. ftp_login() /var/www/html/vendgto/app/Arifulhb/Command/Gto.php:82 并将其存储在整数数组' arraynum2'中。 ('字符串'包含4个字符)

abs(string[j-1] - string[j])

上面的for循环打印正确的数字,如for(int j = length; j > 0; j--) { int num = 0; number2 = abs(string[j-1] - string[j]); printf("second %d\n", number2); arraynum2[num] = number2; printf("second %d\n", arraynum2[num]); num++; }

但是当我打印下一个for循环时,会打印不同的数字:

number2 == arraynum2[num]

例如,数组应包含:122,2,21,2。 但在第二个for循环中,它打印出来:2,0,673946096,32730。

有人可以解释我做错了什么或者我没看到什么吗?

2 个答案:

答案 0 :(得分:2)

您很可能通过尝试读取范围

来触发未定义的行为
for(int j = length; j > 0; j--) {
        int num = 0;
        number2 = abs(string[j-1] - string[j]);

如果string[]数组的大小已经定义,则定义为

int string[length];

然后最后一个索引是length - 1

此外,在第一个循环中,您错误地分配给arraynum2,因为您始终只使用0索引:

int num = 0;
number2 = abs(string[j-1] - string[j]);
printf("second %d\n", number2);
arraynum2[num] = number2;
           ^
        // num is always 0 here

解决方案:

for 循环的初始化步骤中检查您是否未触发 UB 并初始化num

for(int j = length, num = 0; j > 0; j--) {
        number2 = (...);
        arraynum2[num] = number2;
        num++;
}

答案 1 :(得分:1)

在第一个循环中,您会在每次迭代重新初始化num0 。因此,您每次只会分配给第一个元素arraynum2[0]

在您的第一个循环

之外初始化num

for (int j = length; j > 0; j--) {
    int num = 0;

或者:

for (int j = length, num = 0; j > 0; j--) {
    int num = 0;

此外,正如其他人所指出的那样,索引length可能超出了字符串的范围(您没有显示string的定义)。所以你可能需要在索引length - 1开始你的循环。