本练习的目的是创建一个程序,该程序可以读取文件的内容并将其复制到新文件中。但还有另一件事要做,我不知道该怎么做: 我还应该替换我在7个空格的文件中找到的所有标签(' \ t')。 我怎样才能解决后一个问题呢?谢谢。
我尝试使用这些代码行,但显然无法正常工作。它还会显示以下警告:
警告C4047:' =':' char'间接级别与' char [8]'
不同
for (int i = 0; i < x; i++){
if (buf[i] == '\t') {
buf[i] = " ";
}
}
这是我的代码:(当然如果可以某种方式改进,请不要犹豫告诉我。谢谢)
#include <stdio.h>
#include <stdlib.h>
int main(void) {
char buf[500];
FILE *fp, *nuovo;
errno_t err, err1;
/*lettura e creazione file*/
if (err = fopen_s(&fp, "text.txt", "r")) {
printf("Errore");
} else {
printf("File Letto");
}
if (err1 = fopen_s(&nuovo, "nuovo.txt", "w")) {
printf("Errore");
} else {
printf("File Creato");
}
int x = fread_s(buf, sizeof(buf), 1, 500, fp);
/*THIS IS THE PLACE FOR THE MISSING CODE*/
fwrite(&buf, 1, x, nuovo);
fclose(fp);
fclose(nuovo);
}
答案 0 :(得分:2)
您不能将一个字符替换为具有多个字符的字符串。
解决此问题的一种方法如下:您可以在执行输出时执行替换,而不是进行替换。
遍历buf
中的字符,并检查buf[i]
是否为TAB
。如果不是TAB
,请致电fputc(buf[i], nuovo)
。否则,请致电fputs(" ", nuovo)
。
答案 1 :(得分:1)
您必须创建一个新的动态分配缓冲区,您将从源复制所有字符并用空格替换制表符:
#include <malloc.h>
const char *whitespace = " ";
int whitespaceLen = strlen( whitespace );
int newBufSize = 0;
char *newBuf = NULL;
int newBufPos = 0;
for (int i = 0; i < x; i++)
{
int isTab = buf[i] == '\t'; // test if next char in buf is tab
int charSize = isTab ? whitespaceLen : 1; // size which is neede for next char in newBuf
if ( newBufPos + charSize < newBufSize ) // test if newBuf is large enough
{
newBufSize += 500;
char *temp = realloc( newBuf, newBufSize ); // enlarge newBuf
if ( temp == NULL )
{
free( newBuf ); // out of memory, free newBuf an terminate
newBuf = NULL;
break;
}
newBuf = temp;
}
if ( isTab )
{
memcpy( newBuf+newBufPos, whitespace, whitespaceLen ); // copy whitespace blanks to newBuf
newBufPos += whitespaceLen ;
}
else
newBuf[ newBufPos++ ] = buf[i]; // copy char to newBuf
}
请注意某处free( newBuf );