【问题标题】:Initialize a string in C to empty string将C中的字符串初始化为空字符串
【发布时间】:2010-11-10 09:03:31
【问题描述】:

我想将 C 中的字符串初始化为空字符串。 我试过了:

string[0] = ""; 

但它写了

"warning: assignment makes integer from pointer without a cast"

那我该怎么做呢?

【问题讨论】:

  • 声明一个0字符的字符串有什么意义?
  • 你的string是什么类型的?是 char 指针还是 char 数组?
  • @cdhowie:例如,它可能是一个有用的标记值。
  • 哦,我误会了。 “字符串”是先前定义的变量。我认为这是某种奇怪的 fubared 变量声明。
  • 有效问题@leppie 什么是字符串。

标签: c string


【解决方案1】:

除了 Will Dean 的版本之外,整个缓冲区初始化常见的有以下几种:

char s[10] = {'\0'};

char s[10];
memset(s, '\0', sizeof(s));

char s[10];
strncpy(s, "", sizeof(s));

【讨论】:

  • 非常感谢 8 岁的回答。在整个缓冲区初始化方面找不到太多信息。
【解决方案2】:

您想将字符串的第一个字符设置为零,如下所示:

char myString[10];
myString[0] = '\0';

(或myString[0] = 0;

或者,实际上,在初始化时,您可以这样做:

char myString[10] = "";

但这不是将字符串定义为零长度的通用方法。

【讨论】:

  • char myString[1] = ""; 确定吗?您需要为空终止符留出空间。
  • 更正:你可以这样做char myString[10] = "";
  • @JeremyP:""代表"\0",所以我觉得char myString[1]就够了。
  • @NanXiao 我写评论的时候代码说char myString[0] = "";。此后已更正。
【解决方案3】:

假设你的数组'string'已经存在,试试

string[0] = '\0';

\0 是显式 NUL 终止符,用于标记字符串的结尾。

【讨论】:

  • @badgerr:请您更改答案以使用'\0' 吗?
【解决方案4】:

仅在声明期间允许将字符串字面量分配给 char 数组:

char string[] = "";

这会将字符串声明为大小为 1 的 char 数组,并使用 \0 对其进行初始化。

也试试这个:

char str1[] = ""; 
char str2[5] = ""; 
printf("%d, %d\n", sizeof(str1), sizeof(str2)); //prints 1, 5

【讨论】:

    【解决方案5】:

    calloc 分配请求的内存并返回指向它的指针。它还将分配的内存设置为零。

    如果您打算一直使用 string 作为空字符串:

    char *string = NULL;
    string = (char*)calloc(1, sizeof(char));
    

    如果您打算稍后在 string 中存储一些值:

    char *string = NULL;
    int numberOfChars = 50; // you can use as many as you need
    string = (char*)calloc(numberOfChars + 1, sizeof(char));
    

    【讨论】:

      【解决方案6】:

      为此,您可以使用:

      strcpy(string, "");
      

      【讨论】:

        【解决方案7】:
        string[0] = "";
        
        "警告:赋值从没有强制转换的指针中生成整数

        好的,让我们深入了解表达式...

        0 an int:表示从对象string开始前进的字符数(假设string是(或衰减为)char*)

        string[0]:位于对象string开头的char对象

        "":字符串字面量:char[1] 类型的对象

        =:赋值运算符:尝试将char[1] 类型的值分配给char 类型的对象。 char[1](衰减为 char*)和 char 与赋值不兼容,但编译器信任您(程序员)并通过转换类型 char*char[1] 衰减为)继续进行赋值到int --- 你会得到警告作为奖励。 你有一个非常好的编译器 :-)

        【讨论】:

        • 如果有解决方案会得到更多支持;不过,这是对正在发生的事情的一个很好的解释。
        • 我同意@wizzwizz4,但我喜欢我的回答。谢谢!
        【解决方案8】:

        我认为 Amarghosh 的回答是正确的。如果你想初始化一个空字符串(不知道大小)最好的方法是:

        //this will create an empty string without no memory allocation. 
        char str[]="";// it is look like {0}
        

        但如果你想用固定的内存分配初始化一个字符串,你可以这样做:

        // this is better if you know your string size.    
        char str[5]=""; // it is look like {0, 0, 0, 0, 0} 
        

        【讨论】:

          【解决方案9】:

          有点晚了,但我认为您的问题可能是您创建了一个长度为零的数组,而不是长度为 1 的数组。

          字符串是一系列字符,后面跟着一个字符串终止符 ('\0')。空字符串 ("") 不包含任何字符,后跟单个字符串终止符 - 即总共一个字符。

          所以我会尝试以下方法:

          string[1] = ""

          请注意,此行为不是 strlen 所模拟的,它不将终止符计入字符串长度的一部分。

          【讨论】:

            猜你喜欢
            • 2012-07-18
            • 2016-07-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-14
            • 2021-05-25
            • 1970-01-01
            相关资源
            最近更新 更多