C中"string"的定义

Ala*_*ios -4 c string int

如果我错了,请纠正我,但符号"C string"指的是指向内存中3个或更多字节的指针,而第3个指针是NULL.


指针在内存中必须至少为4个字节(因为它们表示的地址值类似于整数,最有可能存储在4个字节中).这意味着一个指针可以指向一个没有溢出的偏移地址,而根据数据类型,将引用n个字节.如果是char,则只有要引用的偏移地址.因此,如果我们分配6个字节,int*我们最多可以有2个字符而没有任何流量.


如果上面说的和我改写是正确的.然后:

int* str = calloc(sizeof(int), 2);
Run Code Online (Sandbox Code Playgroud)

是一个最多可包含4个字符的字符串.如果我们想分别处理字节,我们可以使用类型转换.键入类型以忽略警告.除此之外的所有东西,看起来都像一根绳子.我哪里错了?

Cha*_*via 8

C字符串只是数据类型的nul终止内存缓冲区的常规术语,charC标准库函数经常使用它.

C字符串甚至可以是零长度,这可以是单个nul终结符字节.

const char* s = "abc"; // C-string of length 3 pointing to a static string literal

char c = 0;
char* s = &c; // zero length C-string.

char s[] = "abc"; // C-string of length 3 allocated on the stack.

   // Another C-string of length 3 allocated on the stack
   // The brace initializer syntax explicitly shows the null terminator.
   //
    char s[] = { 'a', 'b', 'c', '\0' }; 
Run Code Online (Sandbox Code Playgroud)

真的是这样的.C字符串只是一个包含char数据的数组或内存缓冲区,其长度由第一次出现的'\0'char确定.指针的大小与它完全无关.

  • @AlanSalios`char实际上也可能是2个字节.不,它不能.在'C'中,sizeof(char)是*always*1.C不是Java. (2认同)