Я сделал меньший сценарий моей большой проблемы. Я пытаюсь передать строку функции, которая из нее создаст новую строку. Однако я столкнулся с некоторыми проблемами.
Я определил строку как
typedef char string[1024];
Тогда у меня есть функция, которая берет строку и создает новую строку, которая заполняется старой строкой и точечным символом
string* add_sth_to_string(char* msg){
string* newStr=malloc(sizeof(string)); // malloc a newStr
strcpy(*newStr, msg); // copying msg to newStr
char buff[1024]; // making a buffer
strcat(buff, "."); // adding a dot to buffer
strcat(buff, *newStr); // adding msg to buffer
strcpy(*newStr, buff); // copying buffer to newStr
return newStr;
}
Затем в основном я пытаюсь использовать эту функцию 3 раза для новой строки каждый раз:
for (i=0; i<3; i++){
string* newStr;
newStr=add_sth_to_string("test");
printf("str: %s\n", *newStr);
free(newStr);
// can even printf here
}
Это странный вывод, который я получаю:
str: .test
str: .test.test
str: .test.test.test
Когда я ожидаю получить:
str: .test
str: .test
str: .test
Кто-нибудь, кто может указать на то, что происходит? Что-то еще, что я нахожу странным, это то, что я могу напечатать значение newStr сразу после того, как освобождается .