【发布时间】:2019-03-25 03:05:57
【问题描述】:
我尝试使用此功能写入文件。 当我用这一行调用函数时,文件保持为空:
if(argc-optind==0){
char* line=readcli();
printf("testline:%s\n",line); //WORKS
line=replacet(line,t,countt(line));
if(oFlag==1){
writeinfile(line,oFileName);
}else{
printf("Expanded:%s\n",line);
}
}
但如果我这样称呼它,它会起作用:
char text[]={"test"};
char * textptr=text;
writeinfile(textptr,fp);
void writeinfile(char* line,char* file){
FILE *f = fopen(file, "a");
if (f == NULL){
printf("Error opening file!\n");
exit(1);
}
fprintf(f, "Some text: %s\n",line);
fclose(f);
}
用空格替换制表符
char* replacet (char *text, int tabsize, int tabanz){
int newsize=strlen(text)+tabsize*tabanz-tabanz;
char newtext[newsize];//Wenn \t nu ein zeichen ist
char* ptrnew=newtext;
char* ptr=text;
for(int i=0;i<strlen(text);i++,ptr++){
if(text[i]=='\t'){
for(int j=0;j<tabsize;j++){
*ptrnew=' ';
ptrnew++;
}
}else{
*ptrnew=text[i];
ptrnew++;
}
}
char* newtextptr=newtext;
return newtextptr;
}
读取在命令行界面输入的一行
char* readcli(){
char *buffer;
size_t bufsize = 64;
size_t chars;
buffer = (char *)malloc(bufsize * sizeof(char));
if( buffer == NULL){
perror("Error malloc");
}
printf("Type something with Tabulators: ");
chars = getline(&buffer,&bufsize,stdin);
printf("%zu characters were read.\n",chars);
return buffer;
}
请帮助我,我不知道如何解决它。 谢谢
【问题讨论】:
-
敢向我们展示
line=replacet(line,t,countt(line));的作用吗?由于这条线似乎是两个 sn-ps 之间的明显区别。 -
另外,
oFlag的值是多少?printf("Expanded:%s\n",line);被执行了吗? -
什么是
oflag?readcli()是什么?replacet()是什么? -
@alk 我编辑了我的问题添加了替换,它只是用空格替换制表符,countt 只计算给定行中有多少个制表符
标签: c string dynamic-memory-allocation c-strings local-variables