簡體   English   中英

嘗試從2D數組中的字符串獲取字符時出現分段錯誤

[英]Segmentation fault when trying to get a character from a string in a 2D array

我正在嘗試從2D數組中的字符串獲取字符。 我目前有以下代碼:

Board setData(Board b, char c, int i, int j) {
  printf("setData called\n char = %c, i = %d, j = %d\n", c, i, j);
  int index = getCharIndex(c);
  printf("Index is %d\n", index);
  char* data = b.cells[i][j];
  printf("Pre-Data = %s\n", data);
  printf("data[index] = %c\n", data[index]); // <---
  data[index] = c;
  printf("Post-Data = %s\n", data);
  b.cells[i][j] = data;
  printf("setData complete!\n");
  return b;
}

其中Board是一個typedef結構。 所有印刷品均顯示預期值。 但是,執行標記行時會發生分段錯誤。 從上一行我們知道'data'是一個字符串,那么為什么在嘗試從字符串中查找字符時會失敗? 這不是因為index的值超出字符串的范圍,當字符串由多個字符組成時,如果index為0,它將失敗。 很感謝任何形式的幫助。

編輯: mcve:

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>

typedef struct {
    char *cells[10][10];
} Board;

Board newBoard() {
  Board board;
  for (int i = 0; i < 10; i++) {
    for (int j = 0; j < 10; j++) {
      board.cells[i][j] = "----";
    }
  }
  return board;
}

Board setData(Board b, int index, char c, int i, int j) {
  printf("setData:\nindex = %d\nchar = %c\ni = %d\nj = %d\n", index, c, i, j);
  char* data = b.cells[i][j];
  printf("data = %s\nSetting data[%d] to %c\n", data, index, c);
  data[index] = c;
  printf("Assigning data back to b.cells[%d][%d]", i, j);
  b.cells[i][j] = data;
  return b;
}

int main(int argc, char *argv[argc]) {
  Board b = newBoard();

  int index = atoi(argv[1]);
  char c = argv[2][0];
  int i = atoi(argv[3]);
  int j = atoi(argv[4]);

  setData(b, index, c, i, j);

}

它給出了輸出:

setData:
index = 0
char = A
i = 2
j = 2
data = ----
Setting data[0] to A
Segmentation fault

理想的結果是,在指定i,j的單元格數組中的字符串中的“-”在索引位置更改為給定字符。

問題是作為字符串文字的"----"很可能位於只讀(寫保護)內存塊中。 如果要修改其內容,請使用例如strdup("----")進行復制,並且不要忘記在某個時候釋放內存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM