我有一个使用Solaris的C程序,似乎兼容性非常古老。许多示例,甚至包括这里的SO,都不起作用,以及我在Mac OS X上编写的大量代码。
因此,在使用非常严格的C时,传递字符串的最安全方法是什么?
目前,我到处使用char指针,因为我认为这很简单。所以我有一些返回char *的函数,我将char *传递给它们等等。
我已经看到了奇怪的行为,例如我传递的char *在进入函数时具有其值,然后在执行诸如printf()或分配到某个其他指针的malloc之类的简单操作后,该值神秘地消失或损坏/覆盖。
对于这些函数的一种错误的方法可能是:
char *myfunction(char *somestr) {
char localstr[MAX_STRLENGTH] = strcpy(localstr, somestr);
free(somestr);
/* ... some work ... */
char *returnstr = strdup(localstr);
return returnstr;
}
这段文字看起来有点混乱。有没有人能指导我如何满足一个简单的需求?
更新
这里有一个函数的示例,我不确定发生了什么情况。不确定这是否足以解决问题,但是请看:
char *get_fullpath(char *command, char *paths) {
printf("paths inside function %s\n", paths); // Prints value of paths just fine
char *fullpath = malloc(MAX_STRLENGTH*sizeof(char*));
printf("paths after malloc %s\n", paths); // paths is all of a sudden just blank
}