只是想知道为什么会这样.我渴望了解更多有关低级语言的知识,而且我只是进入C语言的基础知识,这已经让我感到困惑.
像PHP这样的语言会在解释和/或解析时自动为null终止字符串吗?
在阅读了什么是空终止字符串的基本原理?我发现在C#/.中,一些类似的问题在内部,Net字符串都是长度前缀和null终止,就像在BSTR数据类型中一样.
字符串是长度前缀还是空终止而不是例如的原因是什么.只有长度 - 前缀?
考虑这个字符串:
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车吗?是否有文件定义应该发生什么?
由于这是关于标准的问题,因此需要参考.
使用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)
当我遍历字符指针并检查指针何时到达空终止符时,我收到错误.
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顺便说一下,我不想使用库函数.
免责声明:我对SQL和数据库一般都很陌生.
我需要创建一个最多可存储32个字符的文本数据的字段." VARCHAR(32)" 是否意味着我的数据中只有32个字符?我是否需要为空终止保留额外的字符?
我进行了一个简单的测试,看起来这是一个WYSIWYG缓冲区.但是,我想从那些真正知道自己在做什么的人那里得到一个具体的答案.
我有一个C [++]背景,所以这个问题在我脑海中引起了警钟.
我有点假设基于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)表示基于范围的工作有以下三种可能性之一:
begin和end方法的类std命名空间)中可以访问ADL当我在全局命名空间中添加begin和end函数时,const char*我仍然会收到错误(来自VS12和GCC 4.7).
有没有办法让基于范围的for循环与C样式字符串一起使用?
我尝试添加一个重载namespace std,这是有效的,但据我的理解,添加重载namespace std是非法的(这是正确的吗?)
我是一名学习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) 如果我需要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只是首选明确我在这里是空终止,但对于编译器它是相同的?