gpt4 book ai didi

java - 替换 2D char* 数组中的字符串值 c/java jni

转载 作者:太空宇宙 更新时间:2023-11-04 04:23:57 25 4
gpt4 key购买 nike

我正在尝试替换 c 中 5x5 2D char* 数组中的字符串值。我设法替换了正确位置的值,但由于某种原因,数组中的替换字符始终是“p”,而不是所需的字符。我曾尝试使用 strcpy() 和 strcat() 作为分配值的替代方法,遗憾的是,尽管这两种方法会导致段错误。任何建议将不胜感激。代码附在下面。

有问题的二维数组如下所示:

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 类传递过来的。

最佳答案

在 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;
}

关于java - 替换 2D char* 数组中的字符串值 c/java jni,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43475179/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com