[英]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;
}
任何幫助表示贊賞。
你是不正確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);
您在初始化前使用j
:
int row=24, col=24,i,j; ... for(i=0; i<row; i++){ *(*(str+i)+j) = 0; }
您不正確地將字符串復制到str
:
*(str+4) = "cool";
應該這樣完成:
strncpy(*(str + 4), "cool", col);
這里沒有必要將rownum
用作指針...
void dsply(int *rownum, char **str){ ... }
...也不要在此處row
指針...
void inrow(int rownum, char **str, int *row){ ... }
以下行是不正確的:
str = realloc(str,((*row)+1));
也許您打算這樣做:
str[rownum] = realloc(str[rownum],((*row)+1));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.