【发布时间】:2012-04-23 02:22:00
【问题描述】:
我有一个从文件中读取的字符串数组。 在某些时候,我需要取出一个元素,在 * 之前和 * 之后添加并将其放回同一个数组。
到目前为止,我已经设法在末尾添加了一个星号 strcat。它正在正确打印出来。
现在,我如何在开头添加一个?
//malloc for the array has been done when read from file
char **array;
int arraySize;
for (i=0;i<arraySize;i++){
if (some_condition){
//Add * chars
array[i]=strcat(array[i],"*");
printf("Element %s was marked",array[i]);
}
//prints for example *foo*
}
对不起,如果这个问题完全是愚蠢的,答案可能很明显。提前感谢您提供任何可能的答案!
UPD:数组malloc函数
void readd(FILE *file){
size=0; /*local size */
char line[BUFSIZ]; /* Local array for a single word read */
while ((fgets(line,sizeof(line),file))!=NULL){
/* trim newline char */
if (line[strlen(line)-1]=='\n')
line[strlen(line)-1] = '\0';
array=(char**)realloc(array,(size+1)*sizeof(char *));
array[size++]=strdup(line);
}
}
【问题讨论】:
-
您需要更改原始字符串
array[i],还是可以将其替换为以*开头和结尾的新字符串?原始的array[i]字符串是如何分配的:malloc?作为字符常量?作为堆栈上的字符数组? -
向我们展示您是如何分配内存并最初读取字符串的。最有效的答案也会更改该代码。
-
@AdamLiss 最好使用相同的数组。内存分配请看OP。
-
旁注:每行读取的 realloc 效率不高; prealloc N 个“槽”,当你填满它们时,2N 等等......
-
@ShinTakezou 我选择这种方式是因为输入文件的大小是未知的。所以我需要在读取文件时动态重新分配内存。