gpt4 book ai didi

c - 在 C 中用 2 个字符包围一个字符串

转载 作者:太空宇宙 更新时间:2023-11-04 06:39:49 24 4
gpt4 key购买 nike

我有一个从文件中读取的字符串数组。在某些时候,我需要取出一个元素,在前面添加 * 并在后面添加 *,然后将其放回同一个数组。

到目前为止,我已经设法在 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] 元素有足够的空间容纳额外的字符:

int len = strlen(array[i]);
memmove(array[i] + 1, array[i], len); // memmove() allows overlap btwn src & dest
array[i][0] = '*';
array[i][len+2] = '\0';
array[i][len+1] = '*'

编辑:既然您已经更新了您的问题,我也会更新我的答案。 :-)

首先,请注意像这样使用 realloc() 是危险的:

array=(char**)realloc(array,(size+1)*sizeof(char *));

如果 realloc() 失败,则 array 被重新分配给 NULL 并且原始指针丢失,从而孤立内存分配给它。这样更安全:

char **tmp = realloc(array,(size+1)*sizeof(char *));
if (tmp == NULL) {
// Out of memory error
}
array = tmp;

当然,如果您经常这样做,您也可以跟踪当前大小并一次为另外成百上千个元素分配空间。


由于各个字符串是通过 strdup() 分配的,您有两个选择:

  • 为每个分配额外的 2 个字符,以防您需要添加星号。这并非没有道理,除非有数百万个字符串,或者系统内存受限。

  • 在添加星号之前使用与上述代码段类似的代码重新分配每个字符串。

关于c - 在 C 中用 2 个字符包围一个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10094767/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com