相关疑难解决方法(0)

什么平台有8位字符以外的东西?

不时有人在SO上指出char(也就是"字节")不一定是8位.

似乎8位char几乎是通用的.我原本认为,对于主流平台,必须有一个8位char才能确保其在市场上的可行性.

现在和历史上,哪些平台使用的char不是8位,为什么它们与"普通"8位不同?

在编写代码时,考虑跨平台支持(例如,对于通用库而言),对于非8位平台,值得考虑的是什么char

在过去,我遇到过一些char16位的ADI DSP .我认为DSP是一种利基架构.(然后,当时手工编写的汇编程序很容易击败可用的C编译器可以做的事情,所以我在该平台上没有真正获得C的经验.)

c c++ cross-platform

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

C中sizeof的内部机制?

我使用sizeof来获取C中结构的大小,但我得到的结果是意外的.

struct sdshdr {
    int len;
    int free;
    char buf[];
};


int main(){
    printf("struct len:%d\n",(sizeof(struct sdshdr)));
    return 0;
} //struct len:8, with or without buf
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么不buf占用任何空间,为什么int64位CPU上的类型大小仍为4?

这是输出gcc -v:

Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn)
Target: x86_64-apple-darwin14.4.0
Thread model: posix  
Run Code Online (Sandbox Code Playgroud)

c gcc sizeof flexible-array-member

42
推荐指数
2
解决办法
2361
查看次数

`char`总是总是有8位吗?

我一直认为:

  1. a char由一个字节表示,
  2. 一个字节总是可以指望有8位,
  3. sizeof (char)总是1,
  4. 并且我可以分配的最大理论内存量(以chars 计)是RAM的字节数(+交换空间).

但是现在我已经阅读了维基百科条目,我不再那么肯定了.

我的假设中有哪一个是错的?哪一个是危险的?

c memory

41
推荐指数
4
解决办法
1万
查看次数

在C中连接char数组

我有一个char数组:

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

我想为该名称添加一个扩展名来实现它

hello.txt
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

name += ".txt" 不行

c arrays string

38
推荐指数
5
解决办法
22万
查看次数

算术溢出是否等效于模运算?

我需要在C中进行模256运算.所以我可以简单地做

unsigned char i;
i++;
Run Code Online (Sandbox Code Playgroud)

代替

int i;
i=(i+1)%256;
Run Code Online (Sandbox Code Playgroud)

c overflow modulo integer-arithmetic

25
推荐指数
4
解决办法
2375
查看次数

在C中获取用户输入的最简单方法是什么?

似乎有很多方法可以在C中获得用户输入.

什么是最简单的方法,需要很少的代码?

基本上我需要显示这个:

Enter a file name: apple.text
Run Code Online (Sandbox Code Playgroud)

基本上我需要询问用户文件名.所以我需要的东西只能得到用户输入的那个词.

c io input scanf

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

什么时候printf("%s",char*)停止打印?

在我的课上,我们正在编写自己的C的malloc()函数副本.为了测试我的代码(当前可以分配空间很好)我正在使用:

char* ptr = my_malloc(6*sizeof(char));
memcpy(ptr, "Hello\n", 6*sizeof(char));
printf("%s", ptr);
Run Code Online (Sandbox Code Playgroud)

输出通常是这样的:

Hello
Unprintable character
Run Code Online (Sandbox Code Playgroud)

有些调试认为我的代码本身并没有造成这种情况,因为ptr的内存如下:

[24个字节的元信息] [请求的字节数] [填充]

所以我认为printf正在进入填充,这只是垃圾.所以我进行了测试: printf("%s", "test\nd");得到:

test
d
Run Code Online (Sandbox Code Playgroud)

这让我想知道,当DOES printf("%s",char*)停止打印字符时?

c printf

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

CHAR_BIT是> 8?

ISO C标准要求CHAR_BIT至少为8.

POSIX强制CHAR_BIT等于8,并且(几乎?)所有使用八位字节的网络和通信标准,是否有任何当代C实现CHAR_BIT> 8?

(注意:我对使用18或36位字的历史计算机体系结构不感兴趣.这是关于C的真正问题,因为它在当前的硬件上使用;考虑使用C99或更高版本的系统).

c byte char bit

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

"strcpy"和"malloc"?

做以下事情是否安全?

#include <stdio.h>
#include <malloc.h>
#include <string.h>

int main(void)
{
    char* msg;

    strcpy(msg, "Hello World!!!");  //<---------

    printf("%s\n", msg);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

或者应该使用以下内容?

char* msg = (char*)malloc(sizeof(char) * 15);
Run Code Online (Sandbox Code Playgroud)

c malloc strcpy

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

在C中是malloc(256)和malloc(sizeof(char)*256)等价吗?

我看到人们经常编写C代码,例如:

char *ptr = malloc(sizeof(char)*256);
Run Code Online (Sandbox Code Playgroud)

这真的有必要吗?标准说,sizeof(char)==1根据定义,只写这样有意义:

char *ptr = malloc(256);
Run Code Online (Sandbox Code Playgroud)

谢谢,Boda Cydo.

c malloc pointers sizeof

12
推荐指数
2
解决办法
8885
查看次数