У меня проблемы с использованием write (). Я записываю 2d массив в файл .txt, но когда он записывается в файл, в него добавляется набор символов NUL (не NULL). поэтому я отправился на поиски и нашел это, чтобы удалить символов , но это не помогло, я попытался удалить \ 0, 00, не зная, как поступить с nuls. пробуя некоторые вещи, которые я пытался сделать, sizeof(table[0][0])
дал бы мне 4, тогда я сделал strncpy(buffer, table[0][0], 2)
, но, думаю, это не сработало и не помогло.
Это часть моей программы, я может выложить остальное при необходимости.
обновление: добавлена вся программа внизу
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
int main()
{
char *table[8][8] = {{NULL}};
int fdi;
char *buffer;
char msg[1] = "\n";
char msg1[1] = ",";
fdi = open("board.txt", O_RDWR);
if (fdi != -1)
{
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
buffer = table[i][j];
//strcpy(buffer,table[i][j]);
write(fdi, buffer, sizeof(buffer));
write(fdi, msg1, sizeof(msg1));
}
write(fdi, msg, sizeof(msg));
}
close(fdi);
}
}
Это вывод, который я получаю
Это то, что я хочу получить
Спасибо за любой вклад.
#include <stdio.h>
#include <stdlib.h> // For exit() function
#include <string.h>
#include <ctype.h>
#include <fcntl.h>
#include <unistd.h>//throwing a warning write() seems to work fine without it
#define MAXC 1024
int getColRow(char *input)
{
int val = 0;
for (int i = 0; input[i]; i++)
{
input[i] = tolower(input[i]);
}
switch (input[0])
{
//row
case 97:
val = 0;
break;
case 98:
val = 1;
break;
case 99:
val = 2;
break;
case 100:
val = 3;
break;
case 101:
val = 4;
break;
case 102:
val = 5;
break;
case 103:
val = 6;
break;
case 104:
val = 7;
break;
//col
case 49:
val = 7;
break;
case 50:
val = 6;
break;
case 51:
val = 5;
break;
case 52:
val = 4;
break;
case 53:
val = 3;
break;
case 54:
val = 2;
break;
case 55:
val = 1;
break;
case 56:
val = 0;
break;
default:
break;
}
return val;
}
int main()
{
char c[1000];
char ch[1000];
FILE *fp, *fd, *op;
char word[1000], *token;
char *table[8][8] = {{NULL}};
int i = 0;
int j = 0;
char input[50];
char *endPos;
char *buffer;
char *exit = "exit";
char *show = "show";
char *move = "mv";
char *cp = "cp";
char *prq = "prq";
char *prr = "prq";
char *prb = "prb";
char *prk = "prk";
int a0Row, b0Col, a1Row, b1Col;
int fdi;
int len = 10;
if ((fp = fopen("board.txt", "r")) == NULL)
{
printf("Error! opening file");
return 0;
}
// if ((fd = fopen("board.txt", "r")) == NULL)
// {
// printf("Error! opening file");
// return 0;
// }
//print csv file(formated) one first time to see starting board
// while (fgets(ch, MAXC, fd))
// {
// for (char *tok = strtok(ch, ","); tok; tok = strtok(NULL, ","))
// {
// size_t len;
// tok[strcspn(tok, "\n")] = 0; /* trim '\n' from end tok */
// printf("%s ", tok);
// }
// printf("\n");
// }
//fill array
while (fscanf(fp, "%3s", c) != EOF)
{
token = strtok(c, ",");
len = strlen(token);
//printf("%s ", token);
table[i][j] = malloc(len + 1);
memcpy(table[i][j++], token, len + 1);
if (j >= 8)
{
i++;
j = 0;
//printf("\n");
}
}
do
{
int counter1 = 8;
int counter2 = 8;
fd = fopen("board.txt", "r");
printf("\n\t\t\tCHESS BOARD\n\n");
printf(" a b c d e f g h");
printf("\n |-------------------------------------------------------|\n");
while (fgets(ch, MAXC, fd))
{
i = 0;
j = 0;
for (char *tok = strtok(ch, ","); tok; tok = strtok(NULL, ","))
{
if (i == 0)
{
printf("%d |", counter1);
i++;
counter1--;
}
if (j >= 8)
{
i == 0;
}
size_t len;
tok[strcspn(tok, "\n")] = 0; /* trim '\n' from end tok */
printf(" %s |", tok);
j++;
if (j == 8)
{
printf(" %d", counter2);
counter2--;
j == 0;
}
}
printf("\n |-------------------------------------------------------|\n");
}
printf(" a b c d e f g h");
fclose(fd);
printf("\n\n\nwhats your move (mv, cp, prQ, prR, prB, prK, show, exit): ");
scanf("%s", &input);
for (int i = 0; input[i]; i++)
{
input[i] = tolower(input[i]);
}
if (strcmp(input, show) == 0)
{
fp = fopen("board.txt", "r");
if (fp == NULL)
{
printf("Could not open file");
return 1;
}
printf("\ncontents of board.csv\n\n");
while (fgets(input, 10, fp) != NULL)
printf("%s", input);
fclose(fp);
printf("\n\n");
}
else if (strcmp(input, move) == 0)
{
printf("What Piece are you wanting to move\nEnter row(1-8): ");
scanf("%s", &input);
a0Row = getColRow(input);
printf("Enter column(a-h): ");
scanf("%s", &input);
b0Col = getColRow(input);
printf("\nWhere do you want to move it to\nEnter row(1-8): ");
scanf("%s", &input);
a1Row = getColRow(input);
printf("Enter column(a-h): ");
scanf("%s", &input);
b1Col = getColRow(input);
endPos = table[a1Row][b1Col];
table[a1Row][b1Col] = table[a0Row][b0Col];
table[a0Row][b0Col] = endPos;
printf("\n\n\n");
for (i = 0; i < 8; i++)
{
//printf("\n");
for (j = 0; j < 8; j++)
{
printf("%s ", table[i][j]);
}
printf("\n");
}
//
//this is where the problem starts
//
//
fdi = open("board.txt", O_RDWR);
char msg[1] = "\n";
char msg1[1] = ",";
for(i =0; i<8;i++)
{
for(j=0; j<8;j++)
{
printf("size %d ", sizeof(table[i][j]));
}
printf("\n");
}
buffer = malloc(*table[0][0]);
if (fdi != -1)
{
for (i = 0; i < 8; i++)
{
for (j = 0; j < 8; j++)
{
buffer = table[i][j];
//removeChar(buffer, (int)NULL);
//strcpy(buffer,table[i][j]);
write(fdi, buffer, sizeof(buffer));
write(fdi, msg1, sizeof(msg1));
}
write(fdi, msg, sizeof(msg));
}
close(fdi);
}
}
//
// Issue Ends here
//
//
} while (strcmp(input, exit) != 0);
printf("\n\n\n");//testing printing
for (i = 0; i < 8; i++)
{
//printf("\n");
for (j = 0; j < 8; j++)
{
//printf("table[%d][%d] = %s|", i, j, table[i][j]);
printf("%s ", table[i][j]);
}
printf("\n");
}
fclose(fp);
return 0;
}