【发布时间】:2011-11-06 12:13:31
【问题描述】:
我为我的大问题做了一个小场景。我尝试做的是将一个字符串传递给一个函数,该函数将使用它生成一个新字符串。但是我遇到了一些问题。
我已将字符串定义为
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;
}
然后在 main 中,我每次尝试使用这个函数 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 之后打印它的值。
【问题讨论】:
-
顺便说一句,我不认为
typedef是个好主意。隐藏数组甚至比隐藏指针更糟糕。 -
@Matteo 正如所说,这是我更大程序的一个较小版本。在实际程序中,它是一个
typedef struct request,其中包含char URN[MAX_PATH]。只是试图让问题更容易阅读(这似乎也让我被否决了)。 -
呃,对不起,那没关系;我倾向于指出这种错误,因为它们在初学者中很常见。 (顺便说一句,我不是反对者)
标签: c string malloc concatenation