我一直是C#开发者。
但是现在我必须编写C代码。
我曾经使用String.IsNullOrEmpty()
来防止错误并分配一个新字符串。
我希望编写C代码来表现像String.IsNullOrEmpty。并分配一个新字符串
所以我写了一些示例代码。
static char *pCtvUrl;
void set_app_url(const char* appUrl){
if(!appUrl || !*appUrl)
return;
pCtvUrl = malloc(sizeof(appUrl));
strcpy(pCtvUrl,appUrl);
}
我想检查一下这是否正确。
如果你知道更好的解决方法,请给我一些建议。
感谢
答案 0 :(得分:2)
检查NULL或空字符串是否正确
变化:
pCtvUrl = malloc(sizeof(appUrl)); /* This would allocate sizeof(char*) only. */
为:
pCtvUrl = malloc(sizeof(char) * (strlen(appUrl) + 1)); /* '+1' is for null terminator.*/
在重新分配之前,您还需要free()
pCtvUrl
的记忆:
static char *pCtvUrl = 0;
在pCtvUrl = malloc(...);
致电free(pCtvUrl);
之前。
不要使用全局变量,而是考虑更改set_app_url()
以返回字符串的副本:
char* set_app_url(const char* appUrl)
{
char* retVal = 0;
if (appUrl && *appUrl)
{
retVal = malloc(strlen(appUrl) + 1);
strcpy(retVal,appUrl);
}
return retVal;
}
调用者负责释放返回的字符串。
答案 1 :(得分:1)
检查appUrl
是NULL
还是“空”是否正确。
但是,多次调用set_app_url
函数会导致内存泄漏。您之前没有释放pCtvUrl
。
另外,你可能有buffor underrun。你需要malloc strlen(appUrl) + 1
。无论如何,我建议strdup
在这里使用,而不是。