簡體   English   中英

重新分配數組的行和列

[英]Reallocating an array's row and columns

我正在編寫一個基本的文本編輯器。 現在,我只需要編寫inrow方法即可在指定的行之前添加一行。 如果該行不為空,則將字符串移至下一行並添加新行。 例如:

1:
2:
3:
4: cool
5:

after run:

1:
2:
3:
4:
5: cool
6:

問題是分段錯誤(核心已轉儲)。 我無法找到任何解決方案。

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

void inrow(int rownum, char **str, int *row);

void main(void){

   int row=24, col=24,i,j;
   char **str; int *input; char *d;
   str =(char**) malloc(row*col);

   for(i=0; i<row; i++)
      *(str+i) = (char*)malloc(col);
   for(i=0; i<row; i++){
    *(*(str+i)+j) = 0;
    }

   *(str+4) = "cool";
   inrow(4, str, &row);
   dsply(&row, str);


}

//prints array
void dsply(int *rownum, char **str){

   int i;
   for(i=0; i<*rownum; i++)
      printf("%d: %s\n", (i+1) ,*(str+i));

}

void inrow(int rownum, char **str, int *row){

   char *temp;
   str = realloc(str,((*row)+1));
   *temp = **(str + *row);
   *(*(str + *row)) = 0;
   *(str+(*row+1))= temp;

}

任何幫助表示贊賞。

  1. 你是不正確malloc為ING記憶str

     str =(char**) malloc(row*col); for(i=0; i<row; i++) *(str+i) = (char*)malloc(col); 

    應該這樣完成:

     str = malloc(row * sizeof(*str)); for(int r = 0; r < row; r++) str[r] = malloc(col); 
  2. 您在初始化前使用j

     int row=24, col=24,i,j; ... for(i=0; i<row; i++){ *(*(str+i)+j) = 0; } 
  3. 您不正確地將字符串復制到str

     *(str+4) = "cool"; 

    應該這樣完成:

     strncpy(*(str + 4), "cool", col); 
  4. 這里沒有必要將rownum用作指針...

     void dsply(int *rownum, char **str){ ... } 

    ...也不要在此處row指針...

     void inrow(int rownum, char **str, int *row){ ... } 
  5. 以下行是不正確的:

     str = realloc(str,((*row)+1)); 

    也許您打算這樣做:

     str[rownum] = realloc(str[rownum],((*row)+1)); 

暫無
暫無

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

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