需要C编程帮助:指针和malloc



输出应该是"The wallet belong to Warren Buffett with balance of 855000000000 ">但是我得到的是"The wallet belong to Warren Buffett with balance of 0.00000 ">你能告诉我哪里出错了吗?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
char *owner;
long double balance;
} Wallet;
int main(int argc, char **argv) {
const char *owner = "Warren Buffett";
Wallet *wallet = (Wallet *) malloc(sizeof(Wallet));
wallet->owner = (char *) malloc(strlen(owner) * sizeof(char));
strcpy(wallet->owner, "Warren Buffett");
wallet->balance = 85500000000;
printf("The wallet belongs to %s with balance of %Lf",
wallet->owner, wallet->balance);
return 0;
}

您没有为wallet->owner分配足够的空间。

C中的字符串由一串字符组成,后面跟着一个结束的空字节。你为wallet->owner分配strlen(owner) * sizeof(char)字节,这对于字符串中的字符来说是足够的,但对于终止的空字节来说是不够的。因此,您的写入超出了已分配内存的末尾。这会触发未定义的行为,这可能会显示为意外的输出。

为已分配的空间增加1:

wallet->owner = malloc(strlen(owner) + 1);

同样,sizeof(char)保证为1,因此乘以它可以省略,并且您不应该强制转换malloc的返回值。

最新更新