У вас есть два способа изменить string
переменную, которая либо передает адрес переменной, либо, поскольку она является глобальной переменной, не передает ее в функцию в качестве параметра.Следующие коды показывают соответственно то, что я имею в виду,
Из-за глобальной переменной передавать не нужно,
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char * string = "";
void addToString(char* arg){
unsigned int new_string_len = strlen(string) + strlen(arg) + 1;
if(strlen(string) == 0){
string = malloc(strlen(arg) + 1);
strncat(string,arg,strlen(arg) + 1);
printf("%lu %s \n",strlen(string),string);
}
else{
string = realloc(string,new_string_len);
strncat(string,arg,new_string_len);
}
}
int main(){
for(int i = 0; i < 3; i++){
addToString("boop");
printf("%s",string);
}
printf("%lu %s \n",strlen(string),string);
free(string);
return 0;
}
Передавая свой адрес,
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//char * string = "";
void addToString(char ** string,char* arg){
unsigned int new_string_len = strlen(string) + strlen(arg) + 1;
if(strlen(*string) == 0){
*string = malloc(strlen(arg) + 1);
strncat(*string,arg,strlen(arg) + 1);
printf("%lu %s \n",strlen(*string),*string);
}
else{
*string = realloc(*string,new_string_len);
strncat(*string,arg,new_string_len);
}
}
int main(){
char * string = "";
for(int i = 0; i < 3; i++){
addToString(&string,"boop");
printf("%s",string);
}
printf("%lu %s \n",strlen(string),string);
free(string);
return 0;
}