[英]Why strcat doesn't work with pointer in C?
當我使用普通數組執行此操作時,它正在工作,但使用指針卻沒有。
#include <stdio.h>
#include <string.h>
int main()
{
char source[]="Agdhefhe";
char *accum = "";
for(int i=0;i<=sizeof(*source)/sizeof(char);i++)
{
for(int j=0; j<i; j++)
strcat(accum,source);
}
printf("%s",accum);
return 0;
}
指針accum
指向長度為 1 的const初始化器。寫入 const 和超出分配空間的結果是未定義的。
accum
必須指向一個可寫區域,並分配了足夠的空間來容納最終的字符串。
為了讓它正確,您需要為目標分配足夠的空間來寫入。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
char source[] = "Agdhefhe";
size_t sz = 360;
char *accum = (char *) malloc(sz + 1);
*accum = '\0'; // needed for first strcat call
for (int i = 0; i <= sizeof(*source) / sizeof(char); i++)
for (int j = 0; j < i; j++)
strncat(accum, source, sz); // strncat used to not write too much
printf("%s", accum);
free(accum);
return 0;
}
該程序編寫Agdhefhe
但可以簡化為
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
char const source[] = "Agdhefhe";
size_t sz = 360;
char *accum = (char *) malloc(sz + 1);
*accum = '\0'; // needed for first strcat call
strncat(accum, source, sz);
printf("%s", accum);
free(accum);
return 0;
}
但是,如果您想多次復制字符串,請編寫:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
char const source[] = "Agdhefhe";
size_t sz = 360;
char *accum = (char *) malloc(sz + 1);
*accum = '\0'; // needed for first strcat call
for (int i = 0; i <= sizeof(source) / sizeof(char); i++) // the change is here
for (int j = 0; j < i; j++)
strncat(accum, source, sz);
printf("%s", accum);
free(accum);
return 0;
}
這將寫入AgdhefheAgdhefheAgdhefheAgdhefhe...Agdhefhe
(360 個字符)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.