我所拥有的代码在一个方法中非常简单:
// This line has an Intellisense Error: Initialization with {...} expected for aggregate object
char str[] = GetBuffer(); // x 64 will give us 512 (sector sized buffer) ;
Run Code Online (Sandbox Code Playgroud)
GetBuffer metod是这样的:
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;
}
Run Code Online (Sandbox Code Playgroud)
有什么想法这有什么不对吗?所有我想做的 - 填充一个512字节的缓冲区,其中包含重复的以下字符串:"ERASED"这是ANSI C(而不是C++)并且它已经很长时间以来我用ANSI C编码 - 请帮助和善待!
使用Visual Studio 2012
编辑1 好的很多东西已经修复,感谢你们 - 但还没有完整的答案.str缓冲区包含528个字符而不是512,并且包含大量的ERASED,但是以#结尾
YYYY««««««««îþîþ
有这个想法吗?哦,男孩,我有很多纯C读书要做 - 我已经忘了太多了!
您无法使用函数的返回值初始化数组.
您可以使用指针而不是数组:
char *str = GetBuffer();
Run Code Online (Sandbox Code Playgroud)
或者你可以使用strcpy()或亲戚 - 但有缓冲区溢出风险:
char str[512];
strcpy(str, GetBuffer());
Run Code Online (Sandbox Code Playgroud)
你的GetBuffer()功能也有很多问题.
char *GetBuffer(void)
{
int idx = 0;
int offset = 0;
char *buffer[512];
Run Code Online (Sandbox Code Playgroud)
这应该是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"," ", " "};
Run Code Online (Sandbox Code Playgroud)
你不能像这样设置数组.由于char *buffer[512]问题,你需要双引号.
offset += 8;
}
return *buffer;
}
Run Code Online (Sandbox Code Playgroud)
并且您不应该返回一个局部变量 - 它在函数返回时被销毁,因此之后不能使用它.
你可以写:
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;
}
Run Code Online (Sandbox Code Playgroud)
使用硬编码的长度和限制进行了一小部分混淆; 它们是正确的,但尺寸之间的相互关系并不明显 - 理想情况下,它们应该是:
strlen("ERASED ") == 8256 = 32 * strlen("ERASED ")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);
}
Run Code Online (Sandbox Code Playgroud)