當我使用普通陣列執行此操作時,它可以正常作業,但使用指標卻不能。
#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;
}
uj5u.com熱心網友回復:
指標accum指向長度為 1的 常量初始值設定項。將 a 寫入初始值設定項的資料區和溢位分配的空間的結果是未定義的。
accum 必須指向分配了足夠空間以容納最終字串的可寫區域。
uj5u.com熱心網友回復:
為了做到這一點,您需要為目的地分配足夠的空間來寫入。
#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 個字符)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/399353.html
