【发布时间】:2013-07-23 07:46:03
【问题描述】:
假设我有一个文件。我将所有字节读入一个无符号字符缓冲区。从那里我试图在不知道它的长度的情况下读取一个 c 字符串(以空结尾)。
我尝试了以下方法:
char* Stream::ReadCString()
{
char str[0x10000];
int len = 0;
char* pos = (char*)(this->buffer[this->position]);
while(*pos != 0)
str[len++] = *pos++;
this->position += len+ 1;
return str;
}
我认为我可以在遍历时填充 str 数组中的每个 char,检查 char 是否为空终止。这是行不通的。有什么帮助吗?
this->buffer = 字节数组
this->position = 在数组中的位置
还有其他方法可以做到这一点吗?我想我可以通过实际缓冲区的地址来运行它:
str[len++] = *(char*)(this->buffer[this->position++])?
更新: 我的新功能:
char* Stream::ReadCString()
{
this->AdvPosition(strlen((char*)&(this->buffer[this->position])) + 1);
return (char*)&(this->buffer[this->position]);
}
并调用它:
printf( "String: %s\n", s.ReadCString()); //tried casting to char* as well just outputs blank string
示例文件:
【问题讨论】:
-
你正在尝试返回一个局部变量
-
正确,例如:printf("%s\n", Stream.ReadCString());
-
不太明白,假设你的缓冲区是 [0,0,0,'H','E','L','L',O',0] 并且位置是3 为什么你不返回 &(buffer[position]) ?和位置 += strlen(&buffer[位置])
-
@Alexis 我已经试过了,也许我打错了。我再试一次。
-
@Alexis 它现在会读过去,但由于某些奇怪的原因它不会显示它。