gpt4 book ai didi

c - 从方法的返回填充缓冲区失败... ANSI C

转载 作者:太空宇宙 更新时间:2023-11-04 05:27:43 24 4
gpt4 key购买 nike

我的代码非常简单,我有一个方法:

// This line has an Intellisense Error: Initialization with {...} expected for aggregate object
char str[] = GetBuffer(); // x 64 will give us 512 (sector sized buffer) ;

GetBuffer 方法是这样的:

char * GetBuffer(void)
{
int idx = 0;
int offset = 0;
char *buffer[512];

for(idx =0; idx < 64; idx ++)
{
// This line has an Itellisense Error: "Expected Expression"
buffer[offset + idx] = {"E","R","A","S","E","D"," ", " "};

offset += 8;
}

return *buffer;
}

知道这有什么问题吗?我想做的就是用 512 字节填充一个缓冲区,其中包含以下重复的字符串:“ERASED”这是 ANSI C(不是 C++),自从我用 ANSI C 编码以来已经很久了——请帮助并善待!

使用 Visual Studio 2012

编辑 1好的,多亏了你们,很多事情都已经解决了——但还没有完整的答案。str 缓冲区包含 528 个字符而不是 512 个字符,并且包含很多预期的 ERASED 但以

结尾

ýýýý««««««««îþîþ

有什么想法吗?哦,天哪,我有大量的纯 C 语言阅读要做——我忘记太多了!

最佳答案

您不能使用函数的返回值来初始化数组。

您可以使用指针而不是数组:

char *str = GetBuffer();

或者您可以使用 strcpy() 或一个亲戚 — 但存在缓冲区溢出风险:

char str[512];

strcpy(str, GetBuffer());

你的GetBuffer()函数也有很多问题。

char *GetBuffer(void)
{
int idx = 0;
int offset = 0;
char *buffer[512];

这可能应该是 char buffer[512];,但是...

    for(idx =0; idx < 64; idx ++)
{
// This line has an Itellisense Error: "Expected Expression"
buffer[offset + idx] = {"E","R","A","S","E","D"," ", " "};

你不能这样设置数组。由于 char *buffer[512] 问题,您需要双引号。

        offset += 8;
}

return *buffer;
}

并且您不应该返回局部变量——它在函数返回时被销毁,因此之后无法使用。

你可以这样写:

char *GetBuffer(void)
{
char *buffer = malloc(257);
if (buffer != 0)
{
int idx;
for (idx = 0; idx < 256; idx += 8)
strcpy(buffer+idx, "ERASED ");
}
return buffer;
}

硬编码的长度和限制有一小层混淆;它们是正确的,但尺寸之间的相互联系并不明显 — 理想情况下,它们应该是:

  • strlen("已删除") == 8
  • 256 = 32 * strlen("已删除")
  • 257 = 32 * strlen("ERASED ") + 1(一个用于终端 null)

然后调用代码可能是:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
char *str = GetBuffer();

if (str != 0)
{
printf("<<%s>>\n", str);
free(str);
}

return(0);
}

关于c - 从方法的返回填充缓冲区失败... ANSI C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18438840/

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