s3r*_*ius 3 c arrays pointers visual-studio-2010
我有一个奇怪的问题,我不知道如何处理它.
我正在读取一个50x50的字符文本文件,并希望将其写入50x51动态数组(用'\ 0'填充第51个插槽).
然后我将整个阵列打印到控制台上.它应该显示50行,每行50个字符,因为这是输入.
它的效果也很好 - 除了第一行.出于某种原因总是错的.
#define FIELD_SIZE 50
int main(int argc, char** args){
char* data = ReadFile("start.txt");
char** map = (char**) malloc( FIELD_SIZE );
if(map==NULL)
__debugbreak();
{
int i;
for(i = 0; i < FIELD_SIZE; i+=1){
map[i] = (char*) malloc(FIELD_SIZE+1);
if(map[i]==NULL)
__debugbreak();
//(FIELD_SIZE+1) in order to skip the '\n' at the end of each line.
memcpy( &map[i][0], &data[i*(FIELD_SIZE+1)], FIELD_SIZE);
map[i][FIELD_SIZE] = '\0';
}
}
{
int i;
for(i = 0; i < FIELD_SIZE; i+=1){
printf("%s\n", map[i]); //<-- prints something bad for i==0
}
}
free(data);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
以下是程序执行后我的控制台的样子:
第一行也应该是"aaaaaaaaaaaaaa".所以它似乎是一个糟糕的指针或东西.
如果我将FIELD_SIZE减少到20(并分别读取20x20文本文件),它可以正常工作.
我没有看到数组大小和第一个索引之间没有连接.由于malloc从未返回0,因此分配没有问题.
我正在使用VS2010 C++来编译程序,但我必须将自己限制在C子集中.
小智 5
char**map =(char**)malloc(FIELD_SIZE);
char**map =(char**)malloc(FIELD_SIZE*sizeof(char*));
我不知道这是否是您的代码中的错误.您分配50个字节,但在映射中需要50个字节x 4个字节/指针.
| 归档时间: |
|
| 查看次数: |
218 次 |
| 最近记录: |