C 字符双指针混淆行为

C 字符双指针混淆行为,c,pointers,C,Pointers,我正在做一个练习来练习C指针 任务是将输入字符翻译成ASCII码。 例如,字母A是: # # # ### # # # # 整个ASCII字母表作为不同行(a到Z plus?)的单个输入提供: 我试图将字母表存储为双指针(字母输入) 我希望将输入打印两次: # ## ## ## ### ### ## # # ### ## # # # # # ### # ## # ## ## ### # # # # # # # # # # ### ### # # # # #

我正在做一个练习来练习C指针

任务是将输入字符翻译成ASCII码。 例如,字母A是:

 # 
# #
###
# #
# #

整个ASCII字母表作为不同行(a到Z plus?)的单个输入提供:

我试图将字母表存储为双指针(字母输入)

我希望将输入打印两次:

 #  ##   ## ##  ### ###  ## # # ###  ## # # #   # # ###  #  ##   #  ##   ## ### # # # # # # # # # # ### ### 
# # # # #   # # #   #   #   # #  #    # # # #   ### # # # # # # # # # # #    #  # # # # # # # # # #   #   # 
### ##  #   # # ##  ##  # # ###  #    # ##  #   ### # # # # ##  # # ##   #   #  # # # # ###  #   #   #   ## 
# # # # #   # # #   #   # # # #  #  # # # # #   # # # # # # #    ## # #   #  #  # # # # ### # #  #  #       
# # ##   ## ##  ### #    ## # # ###  #  # # ### # # # #  #  #     # # # ##   #  ###  #  # # # #  #  ###  #  
 #  ##   ## ##  ### ###  ## # # ###  ## # # #   # # ###  #  ##   #  ##   ## ### # # # # # # # # # # ### ### 
# # # # #   # # #   #   #   # #  #    # # # #   ### # # # # # # # # # # #    #  # # # # # # # # # #   #   # 
### ##  #   # # ##  ##  # # ###  #    # ##  #   ### # # # # ##  # # ##   #   #  # # # # ###  #   #   #   ## 
# # # # #   # # #   #   # # # #  #  # # # # #   # # # # # # #    ## # #   #  #  # # # # ### # #  #  #       
# # ##   ## ##  ### #    ## # # ###  #  # # ### # # # #  #  #     # # # ##   #  ###  #  # # # #  #  ###  #  
如何操作字母输入的索引以正确地将每一行打印为字符串

我真的很困惑,因为在for循环中打印似乎工作得很好。然而,紧接着,索引似乎就崩溃了

for (int i = 0; i < H; i++) {
    char ROW[1025];
    fgets(ROW, 1025, stdin);
    alphabet_input[i] = ROW;
}
您可能希望根据您想要的长度调整上述代码(例如1025而不是strlen,或者删除尾随的新行等)

我想提出几点:

  • 这就是我建议编写
    malloc
    的方法:

    pointer_var = <no cast> malloc(<num_elements> * sizeof *pointer_var);
    alphabet_input = malloc(height * sizeof *alphabet_input);
    
    alphabet_input[i] = malloc(len + 1);
    
  • 避免所有大写变量。它们通常用于C中的宏


“H代表垂直字符数”然后。。。也许你应该叫它
num\u vertical
什么的。给变量起个好名字
H
L
T
当然不是。变量名来自问题定义。。。我同意,也许我可以修改代码以提高可读性。在这里,问题定义并不规定您在代码内部使用什么名称。具体输入的输出内容。我做了一些修改以使其更易于理解。谢谢,我的评论只是一些友好的建议。@BernardoRodrigues欢迎您。重要的是了解正在发生的事情,而不是看到它在起作用。
for (int i = 0; i < H; i++) {
    char ROW[1025];
    fgets(ROW, 1025, stdin);
    alphabet_input[i] = ROW;
}
char ** alphabet_input;
alphabet_input = malloc(height * sizeof *alphabet_input);

for (int i = 0; i < height; i++) {
    char row[1025];
    fgets(row, 1025, stdin);

    size_t len = strlen(row);

    alphabet_input[i] = malloc(len + 1);
    strcpy(alphabet_input[i], row);
}
pointer_var = <no cast> malloc(<num_elements> * sizeof *pointer_var);
alphabet_input = malloc(height * sizeof *alphabet_input);
alphabet_input[i] = malloc(len + 1);