我正在尝试用c替换5x5 2D char *数组中的字符串值。我已设法替换正确位置的值,但由于某种原因,数组中的替换字符始终为'p',而不是所需的字符。我已经尝试使用strcpy()和strcat()作为分配值的替代方法,遗憾的是,这两种方法会导致分段错误。任何建议将不胜感激。代码如下。
有问题的2D数组如下所示:
char *map[5][5] = {
{".", ".", ".", ".", "."},
{".", ".", ".", ".", "."},
{".", ".", "G", ".", "."},
{".", ".", ".", ".", "."},
{".", ".", ".", ".", "."} };
我用来改变特定位置角色的方法是:
JNIEXPORT void JNICALL Java_MapJNI_replaceTile(JNIEnv *env, jobject jObject, jint x, jint y, jchar tile){
char tileChar = (char)tile;
map[y][x] = &tileChar;
}
tile从Java类传递。
答案 0 :(得分:0)
您正在传递tileChar的地址,我想您想通过 char本身。
map[y][x] = tileChar;
编辑:没有注意到它是一个指针数组,忽略我上面所说的。
您正在堆栈中创建一个char,因此当您从函数返回时,指向您创建的char的指针不再有效。你需要在堆中创建char。
答案 1 :(得分:0)
在C中,map[y][x] = &tileChar;
是错误代码,因为一旦函数结束,map[y][x]
包含无效指针
JNIEXPORT void JNICALL Java_MapJNI_replaceTile(
JNIEnv *env, jobject jObject, jint x, jint y, jchar tile){
char tileChar = (char)tile;
map[y][x] = &tileChar; // BAD
}
初始化map
,而不是指针,但是作为char[2]
的5x5数组
char map[5][5][2] = {
{".", ".", ".", ".", "."},
{".", ".", ".", ".", "."},
{".", ".", "G", ".", "."},
{".", ".", ".", ".", "."},
{".", ".", ".", ".", "."} };
然后只需指定第一个char
。
JNIEXPORT void JNICALL Java_MapJNI_replaceTile(
JNIEnv *env, jobject jObject, jint x, jint y, jchar tile){
char tileChar = (char)tile;
map[y][x][0] = tileChar;
}
只是使用char
@Sniper的5x5数组。这会影响OP代码的其余部分。
char map[5][5] = {
{'.', '.', '.', '.', '.'},
{'.', '.', '.', '.', '.'},
{'.', '.', 'G', '.', '.'},
{'.', '.', '.', '.', '.'},
{'.', '.', '.', '.', '.'} };
JNIEXPORT void JNICALL Java_MapJNI_replaceTile(
JNIEnv *env, jobject jObject, jint x, jint y, jchar tile){
char tileChar = (char)tile;
map[y][x] = tileChar;
}