【发布时间】:2017-06-09 09:15:59
【问题描述】:
我是 C 编程新手,现在我正在研究字符串。
我的问题是:如果我使用malloc 分配一个字符串(如下面的代码),NULL 字符是否会自动插入到字符串的末尾?
我在这里的另一个问题中找到了答案,似乎 NULL 字符没有自动包含在内。
但是问题来了:我知道如果没有 NULL 字符,像 strlen 这样的函数就不起作用,在这段代码中我使用它并且它起作用。所以我认为我的字符串末尾有\0,即使我没有在任何地方写它。
答案是什么?
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char** argv) {
char *stringa1;
int n;
int i;
printf("How many characters in the string? ");
scanf("%d", &n);
stringa1 = (char*) malloc(n*sizeof(char));
printf("Insert the string: ");
scanf("%s", stringa1);
free(stringa1);
return 0;
}
【问题讨论】:
-
您的代码对我来说看起来不错。
scanf将 NUL(非 NULL)放在字符串的末尾。尝试在free(stringa1)之前拨打strlen。 -
重复@MichaelWalz 所说的内容并挑剔,指针可以是
NULL,字符可以是NUL。 -
在以前的版本中我尝试过,它返回我在第一个
scanf()中输入的数字。 -
除了casting the result of malloc 之外,我认为您的代码没有真正的问题。它在这里没有特别的负面影响,但被认为是不好的做法,可以隐藏错误。
-
没有
NULL字符。NULL是一个带有 空指针常量 的宏,有些不同。而且C没有字符串类型。