char **content;
包含文本行,爲了改變一些行我創建了一個
char **temp;
和複製(與strncpy
)無論我需要從content
到temp
。 所以當它沒關係我有一個char **content
有舊的內容,char **temp
有新的內容,我想用temp
取代我的char **content
。
我嘗試了天真content=temp;
當然沒有結果...
我試圖釋放我char **content
然後content=temp;
但沒有的每個元素改變了,我不能免費的內容本身。
我試圖
void swappointers(char ***content,char ***temp){
char **t = *content;
*content = *temp;
*temp = t;
}
swappointers(&content,&temp);
沒有成功。
如何交換它們?
編輯: 最小代碼:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLINES 7
#define MAXLENGTH 255
void print(char **content){
int countline=0;
while(content[countline]!=NULL){
printf("%s\n",content[countline]);
countline++;
}
}
void swappointers(char ***content,char ***tempcontent){
char **temp = *content;
*content = *tempcontent;
*tempcontent = temp;
}
void addline(char **content,char *texttoadd,int linetoinsert){
char **tempcontent=(char**)malloc(sizeof(char*)*MAXLINES);
int countline=0;
int contentline=0;
while(content[contentline]!=NULL){
if(countline==linetoinsert){
//add our text
tempcontent[countline] = malloc(MAXLENGTH);
strncpy(tempcontent[countline],texttoadd,MAXLENGTH);
//add \0 (string end character)
int linelength=strlen(tempcontent[countline])-1;
for (int countchar=linelength;countchar>=0;countchar--){
if(tempcontent[countline][countchar]=='\r'||tempcontent[countline][countchar]=='\n'){
//end line char
tempcontent[countline][countchar+1]='\0';
}
}
}
else{
//copy from content
tempcontent[countline]=content[contentline];
contentline++;
}
countline++;
}
tempcontent[countline]=NULL;
printf("tempcontent:\n");
print(tempcontent);
swappointers(&content,&tempcontent);
}
int main(){
//allocate memory for our future content
char **content = (char**)malloc(sizeof(char*)*MAXLINES);
content[0] = malloc(MAXLENGTH);
strncpy(content[0],"line 0",MAXLENGTH);
content[1] = malloc(MAXLENGTH);
strncpy(content[1],"line 2",MAXLENGTH);
content[2] = malloc(MAXLENGTH);
strncpy(content[2],"line 3",MAXLENGTH);
content[3] = NULL;
printf("________FILE BEFORE________\n");
print(content);
addline(content,"line 1",1);
printf("________FILE AFTER________\n");
print(content);
}
輸出:
________FILE BEFORE________
line 0
line 2
line 3
tempcontent:
line 0
line 1
line 2
line 3
________FILE AFTER________
line 0
line 2
line 3
請顯示[MCVE]。順便說一句:通常如果你需要'***'你的方法有問題。 –
添加的代碼和我有的輸出 – Vertus
你的代碼中有另一個問題:'print'打印行直到它遇到一個'NULL'指針,但是你不在'main中向數組中添加'NULL'指針'也不在'addline'中。所以你的代碼恰好或多或少地工作,因爲顯然在你的平臺上'malloc'用零填充分配的內存。在我的電腦上,我遇到了一個崩潰。 –