strcat(char[] a,char []b)即将第二个字符串追加到第一个字符串末尾,第二个字符串值不变,第一个变长。
你的理解是对的 但是使用有误!追加时需要保证第一个字符串在加上第二个之后依旧不能溢出。在此题中,你的a[]字符串长度在追加上".txt"之后,会溢出,建议在定义a的时候写上char a[100]保证不溢出。
将文件中一行内容按照空格分割进行读取,可以采用fscanf("%s")来实现
实现过程:
定义二维字符数组,用来接收读到的每个单词
以读方式打开文件
循环读文件,将单词逐个读入数组
循环结束后,关闭文件
输出数组中的单词,以验证
参考代码:
#include <stdio.h>int main(void)
{
FILE *fp
int i,j
char words[100][21] //最多读100个单词,每个单词不超过20个字符
fp=fopen("data.txt", "r")
if ( fp==NULL )
{
printf("open file error\n")
return -1
}
for( i=0i<100i++ ) //循环读取,控制不超过100个
{
if ( fscanf(fp, "%20s", words[i] )!= 1 ) //控制每个单词不超过20个
break
}
fclose(fp)
for( j=0j<ij++ ) //反向输出各单词
printf( "%s ", words[j] )
printf("\n")
return 0
}
输入文件名叫 abc.txt 你可以改名。输出文件名叫 aaX.txt X=0,1,2,3....
单个文件大小 one_size, 你可以 更改大小。
#include<stdio.h>
main(){
FILE *fp, *fout
char nameout[80]
int i,j,k,n
long size, one_size=1024
char *buff
// one_size=one_size * 0.1 //你可以 更改大小
fp = fopen ("abc.txt","rb")
if (fp==NULL) { printf("Error opening file")return 0}
fseek (fp, 0, SEEK_END) // non-portable
size=ftell (fp)
printf ("Size of abc.txt: %d bytes.\n",size) //得到大小
rewind(fp)
n=size/one_size
buff = (char*)malloc(sizeof(char)*one_size)
for (i=0i<ni++)
{
sprintf(nameout,"aa%d.txt",i)
fout = fopen(nameout,"wb")
k = fread (buff,1,one_size,fp)
//if (k != one_size) {printf("read err\n")return (0)}
fwrite(buff,1,one_size,fout)
fclose(fout)
printf("output in %s\n",nameout)
} // for i
j = size % one_size
if (j!=0) {
sprintf(nameout,"aa%d.txt",n)
fout = fopen(nameout,"wb")
k = fread (buff,1,j,fp)
// if (k != j) {printf("read err\n")return (0)}
fwrite(buff,1,k,fout)
fclose(fout)
printf("output in %s\n",nameout)
}
fclose (fp)
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)