C行结束字符

C行结束字符,c,char,newline,C,Char,Newline,我有这个问题 char buffer[100]; buffer[0] = "\n"; 出于某种原因,下面的说法是正确的 buffer[0] == 'T' 当它应该是ascii码时。为什么?试试*buffer[0]='\n'。我想这会给你想要的结果,因为你分配的是char而不是string。字符串使用双引号,字符使用单引号 正如注释缓冲区[0]中正确指出的那样,它是char指针,因此首先它也需要分配内存。在这里,calloc将是一个更好的选择,因为它将分配默认的0值,而malloc将只分配具有

我有这个问题

char buffer[100];
buffer[0] = "\n";
出于某种原因,下面的说法是正确的

buffer[0] == 'T'
当它应该是ascii码时。为什么?

试试*buffer[0]='\n'。我想这会给你想要的结果,因为你分配的是char而不是string。字符串使用双引号,字符使用单引号

正如注释缓冲区[0]中正确指出的那样,它是char指针,因此首先它也需要分配内存。在这里,calloc将是一个更好的选择,因为它将分配默认的0值,而malloc将只分配具有垃圾值的空间。

请尝试*buffer[0]='\n'。我想这会给你想要的结果,因为你分配的是char而不是string。字符串使用双引号,字符使用单引号

正如注释缓冲区[0]中正确指出的那样,它是char指针,因此首先它也需要分配内存。在这里,calloc将是一个更好的选择,因为它将分配默认的0值,而malloc将只分配具有垃圾值的空间。

\n是一个C字符串,即指向以null结尾的一系列char元素的char*。您的程序获取该字符串的地址,并将最低的8位存储到缓冲区[0]。在您的例子中,它们恰好是T的ASCII码

请尝试以下操作:

char buffer[100];
buffer[0] = '\n';
“\n”是一个字符文本,因此它的行为将与预期的一样。

\n是一个C字符串,即指向以null结尾的字符元素序列的字符*。您的程序获取该字符串的地址,并将最低的8位存储到缓冲区[0]。在您的例子中,它们恰好是T的ASCII码

请尝试以下操作:

char buffer[100];
buffer[0] = '\n';

“\n”是一个字符文字,因此它的行为将与预期的一样。

编辑:我搞错了。您的代码应重写为以下代码:

字符缓冲区[100]={0};
缓冲区[0]='\n'

编辑:我搞错了。您的代码应重写为以下代码:

字符缓冲区[100]={0};
缓冲区[0]='\n'

您正在将char*与char进行比较。缓冲区[0]=\n不是可编译代码。您的代码不会编译,而且显然不会运行。然而,您声称您有缓冲区[0]='T',这意味着您运行了代码。这意味着上面的代码是假的,与问题无关。请发真实代码。现在这个问题毫无意义。@AndreyT:一个好的编译器会警告你这行代码,但实际上这并不违法。您几乎不想将char*指定给char,但C会很高兴地让您射中自己的脚。@WTP:这不是C的打字方式。这就是OPs编译器的工作原理。C语言不允许在没有强制转换的情况下将指针转换为整数。在C语言中,以上是约束冲突,即我们通常称之为错误。如果OPs编译器对完全违反约束发出警告,那么我想OPs必须仔细观察这些警告。或者找到更好的编译器?@AndreyT:来自C99规范:任何指针类型都可以转换为整数类型。除非前面指定,否则结果是实现定义的。如果结果不能用整数类型表示,则行为未定义。结果不必在任何整数类型的值范围内。您正在将char*与char进行比较。缓冲区[0]=\n不是可编译的代码。您的代码不会编译,而且显然不会运行。然而,您声称您有缓冲区[0]='T',这意味着您运行了代码。这意味着上面的代码是假的,与问题无关。请发真实代码。现在这个问题毫无意义。@AndreyT:一个好的编译器会警告你这行代码,但实际上这并不违法。您几乎不想将char*指定给char,但C会很高兴地让您射中自己的脚。@WTP:这不是C的打字方式。这就是OPs编译器的工作原理。C语言不允许在没有强制转换的情况下将指针转换为整数。在C语言中,以上是约束冲突,即我们通常称之为错误。如果OPs编译器对完全违反约束发出警告,那么我想OPs必须仔细观察这些警告。或者找到更好的编译器?@AndreyT:来自C99规范:任何指针类型都可以转换为整数类型。除非前面指定,否则结果是实现定义的。如果结果不能用整数类型表示,则行为未定义。结果不必在任何整数类型的值范围内。您第一次是对的。buffer是堆栈分配的数组,其中包含100个字符,buffer[0]是第一个元素。正确的语句是buffer[0]='\n'@尼克:正如注释缓冲区[0]中正确指出的那样,它是字符指针,所以首先它也需要分配内存。这个statament到底是什么意思?缓冲区[0]不是字符指针,它只是一个字符。我完全不清楚这里有谁能用calloc为缓冲区[0]分配任何东西。@Nik:@Amigable Clark Kant的评论措词非常糟糕。缓冲区[0]是一个
烧焦这是没有办法的。无论您试图压缩到缓冲区[0]中的内容是什么,它都将始终保持为一个字符。在这种情况下,OP试图将指针值强制输入到char对象中。这是非法的,但即使他成功编译了它,缓冲区[0]中的最终结果将是一个字符,当然不是指针。在他的情况下,这将是一些不可预测的字符,但字符永远不会消失。在这种情况下,声称缓冲区[0]是指针是毫无意义的。@AnderyT:首先,问题是char*buffer[100],但后来被编辑为char buffer[100]。希望这能澄清问题。@Nik:哦,好的。如果没有反映在历史上,那一定是一个快速编辑。你第一次是对的。buffer是堆栈分配的数组,其中包含100个字符,buffer[0]是第一个元素。正确的语句是buffer[0]='\n'@尼克:正如注释缓冲区[0]中正确指出的那样,它是字符指针,所以首先它也需要分配内存。这个statament到底是什么意思?缓冲区[0]不是字符指针,它只是一个字符。我完全不清楚这里有谁能用calloc为缓冲区[0]分配任何东西。@Nik:@Amigable Clark Kant的评论措词非常糟糕。缓冲区[0]是一个字符。这是没有办法的。无论您试图压缩到缓冲区[0]中的内容是什么,它都将始终保持为一个字符。在这种情况下,OP试图将指针值强制输入到char对象中。这是非法的,但即使他成功编译了它,缓冲区[0]中的最终结果将是一个字符,当然不是指针。在他的情况下,这将是一些不可预测的字符,但字符永远不会消失。在这种情况下,声称缓冲区[0]是指针是毫无意义的。@AnderyT:首先,问题是char*buffer[100],但后来被编辑为char buffer[100]。希望这能澄清问题。@Nik:哦,好的。如果未反映在中,则必须是快速编辑history@Erandros:这是迄今为止你收到的最好的答案。我要说的唯一一点是,这个答案中描述的行为可以通过在编译器中进行过于松散的错误检查而顺利通过,这种情况在C编译器世界中非常常见,尽管您应该注意警告。迂腐的ANSI C编译器会立即拒绝您的程序,并显示错误消息。我不知道为什么此响应未被选为最佳答案,或者@sees响应,因为你们都提供了缓冲区[0]=“\n”;建议,这是关键。不管怎样,我看到了你的其他一些问题。总的来说,它们很有趣。边缘案例,或者喜欢物理力学思维实验。“我不认为你是如此无知。”@Erandros:这是迄今为止你收到的最好的答案。我要说的唯一一点是,这个答案中描述的行为可以通过在编译器中进行过于松散的错误检查而顺利通过,这种情况在C编译器世界中非常常见,尽管您应该注意警告。迂腐的ANSI C编译器会立即拒绝您的程序,并显示错误消息。我不知道为什么此响应未被选为最佳答案,或者@sees响应,因为你们都提供了缓冲区[0]=“\n”;建议,这是关键。不管怎样,我看到了你的其他一些问题。总的来说,它们很有趣。边缘案例,或者喜欢物理力学思维实验。我不认为你是如此无知。