我需要打印出数组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");
}
答案 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.