输出不同 - 无法理解逻辑

时间:2018-03-13 13:57:03

标签: c arrays for-loop reverse sizeof

基本上我正在创建一个数组'string',其中包含一些值,创建另一个数组('auxstring'),然后以相反的顺序存储初始数组的所有值。最后我打印出来。

为什么我按原样执行程序,我得到垃圾作为输出?但是,如果我在'string'数组中添加另一个数字(即:{3,1,1,3,4}),它可以正常工作(输出:43113)。

如果我添加这一行,它也可以正常工作:

“printf(”%d \ n“,sizeof(auxstring));”

在for循环之前。

我确定这是非常基本的东西,但我想了解幕后发生的事情以及为什么在初始字符串的末尾添加一个数字,或者放置printf,以某种方式输出准确的数字。< / p>

感谢。

var editor; // use a global for the submit and return data rendering in the examples

$(document).ready(function() {
editor = new $.fn.dataTable.Editor( {
    ajax: "../php/test.php",
    table: "#example",
    fields: [ {
            label: "Mfg ID",
            name:  "ball_mfg.mfgID"
        }, {
            label: "Mfg name:",
            name:  "ball_mfg.name"
        }, {
            label: "Model #",
            name:  "ball_model.modelID"
        }, {
            label: "Model Name:",
            name:  "ball_model.name"
        }
    ]
} );

$('#example').DataTable( {
    dom: "Bfrtip",
    ajax: {
        url: "../php/test.php",
        type: 'POST'
    },
    columns: [
        { "render": function ( data, type, full, meta ) {
            return '<input type="radio" name="select_model" class="radio1 my_input" value="1">';
        }},  // here's a radio button, modify to use data to populate it,
        { data: "ball_mfg.name" },
        { data: "ball_model.name" }
    ],
    select: false,
    buttons: [
    ]
} );

2 个答案:

答案 0 :(得分:0)

循环条件应为j >= 0

现在您与auxstring[0]中的未初始化值进行比较,不确定(并且看似随机)。

答案 1 :(得分:0)

for循环中的条件

for (j=(sizeof(auxstring) - 1); j >= auxstring[0]; j--) {
                                ^^^^^^^^^^^^^^^^^^

没有意义,因为至少数组auxstring未初始化。

循环也很复杂,因为它使用两个变量作为索引。

答案变量ijl应该具有size_t类型 - 运算符sizeof的返回值的类型。

程序可以按以下方式查看

#include <stdio.h>

int main(void) 
{
    char string[] = { 1, 2, 3, 4 };
    char auxstring[sizeof( string )];
    const size_t N = sizeof( string );

    for ( size_t i = 0; i < N; i++ )
    {
        auxstring[i] = string[N - i - 1];
    }

    for ( size_t i = 0; i < N; i++ )
    {
        printf( "%d", auxstring[i] );
    }

    return 0;
}

它的输出是

4321
相关问题