gpt4 book ai didi

c - C 中的 snprintf 问题

转载 作者:太空宇宙 更新时间:2023-11-04 08:13:32 25 4
gpt4 key购买 nike

在以下情况下,data 和 data_handler 都没有按预期设置。

int main() {

char *data;
char *data_handler;
int i = 0;
int len , req;
char test[10] = "test";

for(; i<10; i++){

req = snprintf(NULL, 0 , "[%s] ", test);

printf("%d --> req \n", req);
if (data == NULL) {
data = (char *) malloc ((sizeof(char) * req) + 1);
data_handler = data;
} else {
data_handler = data + len;
data_handler = (char *) malloc ((sizeof(char) * req) +1);
}

len += snprintf(data_handler, sizeof(data) , "[%s] ", test);

printf("\nData --> %s\n", data);
printf("\nData Handler --> %s\n", data_handler);
}

printf ("%s", data);

}

这个程序的目的是在一个字符串中追加总共 10 次测试。 (试验指针)但我得到以下输出。

7 --> req 

Data --> (��

Data Handler --> [te
7 --> req

Data --> (��

Data Handler --> [te
7 --> req

Data --> (��

Data Handler --> [te
7 --> req

Data --> (��

Data Handler --> [te
7 --> req

Data --> (��

Data Handler --> [te
7 --> req

Data --> (��

Data Handler --> [te
7 --> req

Data --> (��

Data Handler --> [te
7 --> req

Data --> (��

Data Handler --> [te
7 --> req

Data --> (��

Data Handler --> [te
7 --> req

Data --> (��

Data Handler --> [te
(��
Exited: ExitFailure 5

最佳答案

局部变量不会自动初始化,

char *data;

data 未初始化,这意味着它没有存储任何值,它是一个随机值,可能被认为是垃圾并且不可预测,但它很可能不是 NULL,所以测试是错误的,你正在打印 data 而没有首先初始化它。

此外,sizeof 运算符返回类型的大小而不是分配的大小。您应该保留分配的大小以便以后使用。 sizeof 运算符也可以为您提供数组的大小,但 data 不是数组,它是一个指针。

最后:

  1. 不要转换malloc() 的返回值。 Read here for more about it .
  2. 不要使用 sizeof(char),因为根据定义它是 === 1

关于c - C 中的 snprintf 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37288426/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com