char的指针,两种不同的方式一个问题

Pointer of char, two diffrent ways one problem

我有两个不同的字符串声明。

char * Dateiname;
char Dateiname1[LEN_ASCII_TIME];

在第一种情况下,我使用 malloc 分配内存:

if(Dateiname = malloc(sizeof(char)*LEN_ASCII_TIME) == NULL){
   perror(NIO_SPEICHER);
}

第二种情况=LEN_ASCII_TIME=25 不需要 malloc 或 calloc。

然后我想使用 time.h 中的 asctime() 将字符串复制到文件名:

strncpy_s(Dateiname,LEN_ASCII_TIME,asctime(sysTimeStruct),LEN_ASCII_TIME-1); 

输出案例1:

(null)

如果我使用第二种变体:

 strncpy_s(Dateiname1,LEN_ASCII_TIME,asctime(sysTimeStruct),LEN_ASCII_TIME-1);`

输出变量 2:

Tue Mar 23 12:57:51 2021

我的思维错误在哪里?为什么我不能用malloc给charptr *预留和写入内存区域?

长话短说:这是因为你尝试了一个聪明的把戏。如果在 if 之外分配 malloc 的结果,您将得到所需的结果:

Dateiname = malloc(LEN_ASCII_TIME);
if(Dateiname == NULL){
   perror(NIO_SPEICHER);
}

您的代码行为不同的原因是赋值 =precedence 低于 ==,因此 Dateiname 赋值比较 malloc-ed 指向 NULL 的指针,即 0.

请注意,sizeof(char) 被标准固定为 1,因此您永远不需要乘以它。