c# - 如何在 C# 中编写类似于 String.isNullOrEmpty 的 C 代码

标签 c# c

我一直是 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);
}

我想检查这是否正确。

如果你知道更好的解决方法,请给我一些建议。

谢谢

最佳答案

您对 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;
}

调用者负责释放返回的字符串。

关于c# - 如何在 C# 中编写类似于 String.isNullOrEmpty 的 C 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8756218/

相关文章:

c# - 删除动态创建的控件

C# 协方差 : classes with different interface signature

c# - 数据绑定(bind)到嵌套属性 - 无法绑定(bind)属性或列 (Winforms)

c - 重新排列C中的位

c - 链表中的字符串存储和比较

c - 内存管理c

c# - Roslyn 上的 GetCompletionsAsync 出现 NullReferenceException

c# - 有没有一种快速的方法来格式化 XmlDocument 以便在 C# 中显示?

Renesas RX62N ADC 的配置

c - 如何传递未绑定(bind)的多维数组?