C程序 - 正确初始化和打印带或不带指针的字符数组?

时间:2014-03-21 03:36:20

标签: c arrays pointers

我需要打印出数组row_col,但是错误地放置了我的指针,或者只是不正确地声明了我的数组。我已经尝试了各种方法来正确打印它,但此时,我相信我只获取内存地址而不是存储在给定数组位置的实际信息。任何寻找我的问题的帮助将不胜感激。

这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include "find_word.h"
#include <string.h>

void word_find(char stringof_3 [3][3], char the_word[3]){

    char *row_col;
    int print_letter = 0;
    int word_count = 0;

    if(stringof_3[0][0] == the_word[0] && stringof_3[0][1] == the_word[1] && stringof_3[0][2] == the_word[2])
            row_col = "0,0  ";
    else if(stringof_3[0][0] == the_word[0] && stringof_3[1][0] == the_word[1] && stringof_3[2][0] == the_word[2])
            row_col = "0,0  ";
    else if(stringof_3[1][0] == the_word[0] && stringof_3[1][1] == the_word[1] && stringof_3[1][2] == the_word[2])
            row_col = "1,0  ";
    else if(stringof_3[2][0] == the_word[0] && stringof_3[2][1] == the_word[1] && stringof_3[2][2] == the_word[2])
            row_col = "2,0  ";
    else if(stringof_3[0][1] == the_word[0] && stringof_3[1][1] == the_word[1] && stringof_3[2][1] == the_word[2])
            row_col = "0,1  ";
    else if(stringof_3[0][2] == the_word[0] && stringof_3[1][2] == the_word[1] && stringof_3[2][2] == the_word[2])
            row_col = "0,2 ";
    else
            row_col = "-1,-1";
    for(print_letter = 0; print_letter < 3; print_letter++){
            printf("%c", the_word[print_letter]);
    }
    printf(" found at: ");
    for(word_count = 0; word_count < 6; word_count++){
            printf("%d", row_col[word_count]);
    }
    printf("\n");
}

2 个答案:

答案 0 :(得分:1)

在这种情况下,无需手动迭代row_col中的所有字符。它是char*值,始终以null结尾(仅使用字符串文字初始化)。因此,可以使用%s格式说明符进行打印。

printf("%s", row_col);

考虑到您只将字符串文字分配给row_col,最好将其声明为以下内容以表明它是不变的行为

const char* row_col; 

答案 1 :(得分:1)

您不能简单地以这种方式将常量字符串分配给char *。 使用strcpy()(在string.h中找到)将字符串复制到其中。

strcpy(row_col, "0,0   ");

那就是说,你做事的方式完全是奇怪的。例如,当您甚至不需要循环时,使用for循环一次打印row_col一个字符。你可以做到

printf("%s", row_col);

另外,要将stringof_3中的每一行与the_word进行比较,您无需单独比较每个字符。只是做

strcmp(stringof_3[i], the_word);

其中i从0迭代到2.如果两个字符串相同,则strcmp()返回0.