首先,这里是一些代码:
int main()
{
int days[] = {1,2,3,4,5};
int *ptr = days;
printf("%u\n", sizeof(days));
printf("%u\n", sizeof(ptr));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
有没有办法找出ptr指向的数组的大小(而不是仅仅给出它的大小,在32位系统上是4个字节)?
在C中,似乎有零各个值之间的差- NULL,NUL和0.
我知道ASCII字符的'0'计算结果为48或0x30.
该NULL指针通常定义为:
#define NULL 0
Run Code Online (Sandbox Code Playgroud)
要么
#define NULL (void *)0
Run Code Online (Sandbox Code Playgroud)
另外,也有似乎评价的NUL人物.'\0'0
是否有时候这三个值不相等?
这在64位系统上也是如此吗?
我正在使用gcc 4.9.1/Mingw并使用以下代码编译代码:
gcc test.c -otest.exe -std = c11 -pedantic-errors -Wall -Wextra
此代码提供诊断:
int main (void)
{
char a[5] = {'h','e','l','l','o','\0'};
}
Run Code Online (Sandbox Code Playgroud)
错误:数组初始化器中的多余元素char [5]
但是,此代码不会产生警告:
int main (void)
{
char b[5] = "hello";
}
Run Code Online (Sandbox Code Playgroud)
我认为这两种形式是100%相同的.C标准中是否有任何理由或微妙之处,为什么后者不应该发出警告?
或者这是编译器错误?我知道C标准允许多余的初始化器,与C++不同,所以我不相信gcc 需要进行诊断.但我希望编译器能够始终如一地发出警告.
我的意思是,据我所知,当出现“null value(\0)”时,字符串将“结束”。
许多函数都与字符串返回值有关,并在字符串中遇到“空值”时立即转义。
但是,如果字符串中没有空值怎么办?
是否有可能创建这样的字符串?
比如,是否可以创建一个数组
char cArray[100] ={};
Run Code Online (Sandbox Code Playgroud)
并填写所有索引,不带“null”?。
如果是这样,“指示根本没有空值的字符串结尾”的最佳方法是什么?
如果其中没有空值,它还是“字符串”吗?
它们与非空终止字符串有何不同?终止字符串的这个 null 是什么?和NULL有什么不同吗?我应该自己以空终止我的字符串,还是编译器会为我做这件事?为什么需要空终止字符串?如何设置代码/数据来处理空终止字符串?
当我尝试编译以下内容时:
int main() {
char a[4] = "1234"; // This string is length 5, no warning
char b[4] = "12345"; // This string is length 6, produces a warning
}
Run Code Online (Sandbox Code Playgroud)
我收到有关“字符数组的初始化字符串太长”或仅第二行的警告。有谁知道这是否是故意的?为什么第一个不会产生警告?我尝试了 gcc 和 clang。
我需要打印一个字符串数组的元素,每个元素都包含一个字符。通常可以使用一维char数组,但就我而言,我需要使用字符串来存储它们。
我尝试了相同的代码,但每个元素的长度都超过一个字符,而且似乎可以正常工作,但是对于单个字符,我无法弄清楚。
void hands(){
char suits[4][1] = {"A", "K", "Q", "J"};
printf("%s", suits[0]);
}
Run Code Online (Sandbox Code Playgroud)
我期望输出为“ A”,而不是“ AKQJ {; W?”
当尝试运行以下程序时:-
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("HI whats your name? ");
char name;
scanf("%s",&name);
printf("So your name is %s ", name);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是当尝试运行我的代码时,我收到一条错误消息
Process terminated with status -1073741819 (0 minute(s), 11 second(s))
Run Code Online (Sandbox Code Playgroud)
我不知道这个错误意味着什么。该程序是一个非常简单的 C 程序,用于将名称作为输入并向用户打招呼。请告诉我如何修复这个错误。
int main(void)
{
char s[4] = "heloo"; // The character array is initialized with more data than its size
printf("%s",s);
}
Run Code Online (Sandbox Code Playgroud)
输出是:helo?[?G?。
为什么输出是这种格式?