标签: null-terminated

为什么C中的字符串需要以null结尾?

只是想知道为什么会这样.我渴望了解更多有关低级语言的知识,而且我只是进入C语言的基础知识,这已经让我感到困惑.

像PHP这样的语言会在解释和/或解析时自动为null终止字符串吗?

c string null-terminated

20
推荐指数
5
解决办法
6843
查看次数

为什么C#/ .net字符串长度为前缀且空终止?

在阅读了什么是空终止字符串的基本原理?我发现在C#/.中,一些类似的问题在内部,Net字符串都是长度前缀和null终止,就像在BSTR数据类型中一样.

字符串是长度前缀还是空终止而不是例如的原因是什么.只有长度 - 前缀?

.net c# string bstr null-terminated

18
推荐指数
2
解决办法
3488
查看次数

如何从C#字符串中获取空终止字符串?

  • 我正在与需要空终止字符串的服务器通信
  • 我怎样才能在C#中巧妙地做到这一点?

c# string null-terminated

17
推荐指数
4
解决办法
3万
查看次数

字符串中的空字符

考虑这个字符串:

var s = "A\0Z";
Run Code Online (Sandbox Code Playgroud)

其长度为3,如下所示s.length.使用console.log您可以看到该字符串不会削减,并且s[1]""s.charCodeAt(1)0.

当您在Firefox中提醒它时,您会看到AZ.当您在Chrome/Linux中使用时提醒它时alert(s),会\0终止字符串,您会看到A.

我的问题是:浏览器和Javascript引擎该做什么?这里有Chrome车吗?是否有文件定义应该发生什么?

由于这是关于标准的问题,因此需要参考.

javascript string unicode google-chrome null-terminated

17
推荐指数
2
解决办法
2万
查看次数

如何用空终止字符memset char数组?

使用null终止字符memset整个字符数组的正确和最安全的方法是什么?我可以列出一些用法:

...
char* buffer = new char [ARRAY_LENGTH];

//Option 1:             memset( buffer, '\0', sizeof(buffer) );
//Option 2 before edit: memset( buffer, '\0', sizeof(char*) * ARRAY_LENGTH );
//Option 2 after edit:  memset( buffer, '\0', sizeof(char) * ARRAY_LENGTH );
//Option 3:             memset( buffer, '\0', ARRAY_LENGTH );
...
Run Code Online (Sandbox Code Playgroud)
  • 这些中的任何一个都有明显的优势吗?
  • 使用1,2或3可以面对哪些问题?
  • 处理此请求的最佳方法是什么?

c++ arrays memset null-terminated c++11

15
推荐指数
3
解决办法
7万
查看次数

指针和整数之间的警告比较

当我遍历字符指针并检查指针何时到达空终止符时,我收到错误.

 const char* message = "hi";

 //I then loop through the message and I get an error in the below if statement.

 if (*message == "\0") {
  ...//do something
 }
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

warning: comparison between pointer and integer
      ('int' and 'char *')
Run Code Online (Sandbox Code Playgroud)

我认为*messagedereferences消息面前,所以我得到消息指向的值?strcmp顺便说一下,我不想使用库函数.

c null-terminated

15
推荐指数
3
解决办法
11万
查看次数

[我的] SQL VARCHAR大小和Null-Termination

免责声明:我对SQL和数据库一般都很陌生.


我需要创建一个最多可存储32个字符的文本数据的字段." VARCHAR(32)" 是否意味着我的数据中只有32个字符?我是否需要为空终止保留额外的字符?

我进行了一个简单的测试,看起来这是一个WYSIWYG缓冲区.但是,我想从那些真正知道自己在做什么的人那里得到一个具体的答案.


我有一个C [++]背景,所以这个问题在我脑海中引起了警钟.

mysql sql varchar null-terminated

14
推荐指数
2
解决办法
4139
查看次数

基于空终止字符串的循环的范围

我有点假设基于for循环的范围会支持C风格的字符串

void print_C_str(const char* str)
{
    for(char c : str)
    {
        cout << c;
    }
}
Run Code Online (Sandbox Code Playgroud)

然而事实并非如此,标准[stmt.ranged] (6.5.4)表示基于范围的工作有以下三种可能性之一:

  1. 范围是一个数组
  2. 范围是一个具有可调用beginend方法的类
  3. 在关联的命名空间(加上std命名空间)中可以访问ADL

当我在全局命名空间中添加beginend函数时,const char*我仍然会收到错误(来自VS12和GCC 4.7).

有没有办法让基于范围的for循环与C样式字符串一起使用?

我尝试添加一个重载namespace std,这是有效的,但据我的理解,添加重载namespace std是非法的(这是正确的吗?)

c++ for-loop null-terminated c++11

14
推荐指数
1
解决办法
2472
查看次数

C++ char数组null终止符位置

我是一名学习C++的学生,我试图理解空终止字符数组是如何工作的.假设我定义了一个char数组,如下所示:

char* str1 = "hello world";
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,strlen(str1)等于11,并且它以空值终止.

如果上面的char数组的所有11个元素都填充了字符"hello world",那么C++在哪里放置null终止符?它实际上是分配一个长度为12而不是11的数组,第12个字符是'\0'CPlusPlus.com似乎建议11中的一个需要'\0',除非它确实分配12.

假设我执行以下操作:

// Create a new char array
char* str2 = (char*) malloc( strlen(str1) );

// Copy the first one to the second one
strncpy( str2, str1, strlen(str1) );

// Output the second one
cout << "Str2: " << str2 << endl;
Run Code Online (Sandbox Code Playgroud)

这个输出Str2: hello worldatcomY?°g??,我假设是C++在指针指向的位置读取内存,char* str2直到它遇到它解释为空字符的内容.

但是,如果我这样做:

// Null-terminate the second one
str2[strlen(str1)] = '\0';

// Output the second one …
Run Code Online (Sandbox Code Playgroud)

c++ arrays char null-terminated

13
推荐指数
2
解决办法
3万
查看次数

空终止字符串:使用'\ 0'还是只使用0?

如果我需要null终止一个String,我应该使用\0或者是否0也足够简单?

使用之间有什么区别吗?

char a[5];
a[0] = 0;
Run Code Online (Sandbox Code Playgroud)

char a[5];
a[0] = '\0';
Run Code Online (Sandbox Code Playgroud)

或者\0只是首选明确我在这里是空终止,但对于编译器它是相同的?

c c++ null-terminated

12
推荐指数
4
解决办法
1012
查看次数

标签 统计

null-terminated ×10

c++ ×4

string ×4

c ×3

arrays ×2

c# ×2

c++11 ×2

.net ×1

bstr ×1

char ×1

for-loop ×1

google-chrome ×1

javascript ×1

memset ×1

mysql ×1

sql ×1

unicode ×1

varchar ×1