相关疑难解决方法(0)

如何找到'sizeof'(指向数组的指针)?

首先,这里是一些代码:

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 arrays pointers sizeof

288
推荐指数
8
解决办法
35万
查看次数

NULL,'\ 0'和0之间有什么区别

在C中,似乎有零各个值之间的差- NULL,NUL0.

我知道ASCII字符的'0'计算结果为480x30.

NULL指针通常定义为:

#define NULL 0
Run Code Online (Sandbox Code Playgroud)

要么

#define NULL (void *)0
Run Code Online (Sandbox Code Playgroud)

另外,也有似乎评价的NUL人物.'\0'0

是否有时候这三个值不相等?

这在64位系统上也是如此吗?

c null pointers

287
推荐指数
6
解决办法
28万
查看次数

字符串初始化的gcc诊断不一致

我正在使用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 需要进行诊断.但我希望编译器能够始终如一地发出警告.

c gcc initializer-list

5
推荐指数
2
解决办法
157
查看次数

在C中,是否可以创建一个没有'\0(null)'的字符串?

我的意思是,据我所知,当出现“null value(\0)”时,字符串将“结束”。

许多函数都与字符串返回值有关,并在字符串中遇到“空值”时立即转义。

但是,如果字符串中没有空值怎么办?

是否有可能创建这样的字符串?

比如,是否可以创建一个数组

char cArray[100] ={};
Run Code Online (Sandbox Code Playgroud)

并填写所有索引,不带“null”?。

如果是这样,“指示根本没有空值的字符串结尾”的最佳方法是什么?

如果其中没有空值,它还是“字符串”吗?

c arrays null

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

什么是空终止字符串?

它们与非空终止字符串有何不同?终止字符串的这个 null 是什么?和NULL有什么不同吗?我应该自己以空终止我的字符串,还是编译器会为我做这件事?为什么需要空终止字符串?如何设置代码/数据来处理空终止字符串?

c c-strings null-terminated

3
推荐指数
1
解决办法
1321
查看次数

当 char 数组初始值设定项太长 1 时不发出警告

当我尝试编译以下内容时:

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。

c arrays initialization char string-literals

2
推荐指数
1
解决办法
108
查看次数

字符串数组将不打印单个字符

我需要打印一个字符串数组的元素,每个元素都包含一个字符。通常可以使用一维char数组,但就我而言,我需要使用字符串来存储它们。

我尝试了相同的代码,但每个元素的长度都超过一个字符,而且似乎可以正常工作,但是对于单个字符,我无法弄清楚。

void hands(){
    char suits[4][1] = {"A", "K", "Q", "J"};
    printf("%s", suits[0]);
}
Run Code Online (Sandbox Code Playgroud)

我期望输出为“ A”,而不是“ AKQJ {; W?”

c arrays string c-strings

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

进程终止,C 中出现状态 -1073741819 错误

当尝试运行以下程序时:-

#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 程序,用于将名称作为输入并向用户打招呼。请告诉我如何修复这个错误。

c

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

当字符数组用大于其大小的数据初始化时究竟会发生什么?

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?

为什么输出是这种格式?

c arrays initialization char string-literals

0
推荐指数
1
解决办法
112
查看次数