【问题标题】:Declare a String type in C [duplicate]在 C 中声明一个字符串类型 [重复]
【发布时间】:2015-11-03 07:09:30
【问题描述】:

我是 C 的新手,我来自 Java 背景。

所以,我想声明一个字符串并立即尝试:

String text;

然后它告诉我没有定义术语“字符串”。 我通过互联网搜索并发现了这个:

char text[16] = { 'E','i','n',' ','l','a','n','g','e','r',' ','T','e','x','t','\0' };

但这不是很好,而且工作量太大。必须有其他更好的方法。 也许进口一些东西。有没有人对此有好的解决方案?

【问题讨论】:

  • 你可以直接char text[] = "whatever..."
  • 这个问题可能有用:Declaring and modifying strings in C
  • 我建议您查看The Definitive C Book Guide and List,并阅读一些初学者书籍和教程。
  • C 的级别比 Java 低得多,而且更加无情,您不会通过尝试随机的东西并希望它起作用而走得太远(特别是因为 C 中的许多错误都是“未定义的行为”,这意味着您的程序可能看起来可以工作,偶尔会随机崩溃)。用合适的书学习语言。
  • 它不起作用,因为 C 不是 Java...而且“不是很好而且工作量太大”很好地总结了 C 字符串,这是有原因的,为什么自 C 以来发明的所有语言都有他们自己的字符串类。

标签: c string variables


【解决方案1】:

C 中没有字符串类型。

字符串变量是由空字符终止的一维 ASCII 字符数组。

你尝试声明字符串的方法是对的。

char text[16] = { 'E','i','n',' ','l','a','n','g','e','r',' ','T','e','x','t','\0' };

但最简单的就是简单

char str[]="Ein Langer Text"

这是初始化和前一个相同,但在这种情况下编译器会自动在末尾插入空字符。

一个简单的例子:

#include <stdio.h>
int main(int argc, char const *argv[])
{
char str[]="Ein Langer Text";
int i;
for (i = 0; str[i]!='\0' ; ++i)
{
   printf("%c",str[i]);

}
printf("\n");
return 0;
}

你甚至可以有一个有限大小的字符串,例如:

char[40]="whatever you want to keep here up to fourty characters";

【讨论】:

  • 赞成以“C 中没有字符串类型”为首。
  • 解释不切题、误导还是错误??
  • 不 - 我只是在投票之前不需要再阅读:)
  • 反正我想的是另一种方式谢谢 :)
【解决方案2】:

C 中,没有称为String 的标准数据类型。它可以是字符串文字,也可以是 char 数组。

FWIW,

char text[16] = { 'E','i','n',' ','l','a','n','g','e','r',' ','T','e','x','t','\0' };

可以简写为

char text[ ] = { "Ein langer Text"};   //modifiable, but size limited to
                                       // the initalizer

char text[128] = { "Ein langer Text"};  // modifiable, with larger size than initializer

char *text = "Ein langer Text";  //not modifiable

【讨论】:

  • 实际上const char *const text = "Ein langer Text"; 是不可修改的(并防止编译器抱怨)
  • @OznOg 我不是说你错了,但根据定义,字符串文字是不可变的。无论如何,尝试更改它们将导致 UB。
  • 你也可以省略括号,char text[] = "Ein langer Text"; 工作正常。
【解决方案3】:

更简单:

char text[]="test 123"; 

char text[9]="test 123"; 

【讨论】:

    【解决方案4】:

    在c中,没有字符串类型:

    你可以试试:

    char *mystring = "Hello world";
    

    你可以试试我的c++:

    #include <iostream>
    
    std::string mystring = "Hello";
    

    【讨论】:

    • 关于指向字符串文字的指针的错误建议。字符串文字是只读的,因此您需要一个指向常量字符串的指针,即const char *
    • 为 C 问题提供 C++ 示例是个坏主意。语言是独立且不同的。
    猜你喜欢
    • 2021-12-12
    • 2014-06-03
    • 1970-01-01
    • 2014-01-03
    • 2018-02-20
    • 2012-02-02
    • 1970-01-01
    • 2021-09-26
    • 1970-01-01
    相关资源
    最近更新 更多