[英]Surround a string with 2 chars in C
我有一個從文件中讀取的字符串數組。 在某些時候,我需要取出一個元素,在之前添加 * 並在之后添加 *,然后將其放回同一個數組。
到目前為止,我已經設法在末尾添加一個星號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 function
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
並且原始指針丟失,孤立已分配給它的 memory。 這更安全:
char **tmp = realloc(array,(size+1)*sizeof(char *));
if (tmp == NULL) {
// Out of memory error
}
array = tmp;
當然,如果您經常這樣做,您不妨跟蹤當前大小並一次為另外一百或一千個元素分配空間。
由於各個字符串是使用strdup()
分配的,因此您有兩個選擇:
為每個分配額外的 2 個字符,以防您需要添加星號。 這不是不合理的,除非有數百萬個字符串,或者系統內存受限。
在添加星號之前重新分配每個字符串,使用類似上面代碼片段的代碼。
最簡單的方法是執行雙 strcat 到 go。
不過,對於這種事情,你有想過memory管理嗎? memory中你的字符串是怎么保存的?
在這一行中,您丟失了指向原始字符串的指針:
array[i]=strcat(array[i],"*");
你有另一個對原始指針的引用嗎? 也許您想先保存它,然后重新分配相同的長度 + 2 個字符,然后放入第一個 *,復制字符串,放入最后一個 * 並刪除原始指針。
您可以將array[i]
one position 中的每個字符從后面開始向右復制(到更高的索引),然后將第一個字符替換為“*”。
這假設您有足夠的空間容納兩顆額外的星星。
如果沒有,你有兩個選擇
malloc
一個足夠大的區域,然后從索引 1 開始復制字符串,並將星星放在適當的位置 position(索引 0 和索引strlen(array[i])+1
。不要忘記重新分配array[i]
中的指針array[i]
之后到 malloc'd 區域。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.