前言:
C语言的空字符是在字符串结尾处编译系统自动加上的‘\0’,以让计算机识别出一个字符串的结尾。所以要求在存储字符串时,至少要保留一个空间来存储‘\0’,其中,类似‘\0’这种形式的字符又被称为转义字符。
转义字符(Escape character),所有的ASCII码都可以用“\”加数字(一般是8进制数字)来表示。而C中定义了一些字母前加””来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思了。
本文要说的‘\0’、‘\n’都是这类不能显示但是有很大用处的转义字符。
字符串存入数组并写入新文件
首先我用如下代码将一段字符串写入文件
int main()
{
//打开要写入的文件
char arr[] = "012345678";
FILE* wFile = fopen("demoput.txt","w");
if(NULL == wFile)
{
printf("文件打开失败\n");
return 0;
}
fputs(arr, wFile);
printf("写入文件成功\n");
printf("字符串长度:%d\n", strlen(arr));
fclose(wFile);
return 0;
}
定义了hello字符串存到了arr数组中,然后将该数组中的字符串使用fputs(0函数写入到demoput.txt文件中,打印字符串长度,结果如下图所示:
发现demoput.txt文件中只有一行,结果就是我们需要写入的字符串 “012345678” ,此时字符串长度为9。
单个字符存入数组并写入新文件
修改上述代码,将以字符串存入“012345678”改为单个字符存入,代码如下:
int main()
{
//打开要写入的文件
//char arr[] = "012345678";
char arr[] = {
'0', '1', '2', '3', '4', '5', '6', '7', '8'};
FILE* wFile = fopen("demoput.txt","w");
if(NULL == wFile)
{
printf("文件打开失败\n");
return 0;
}
fputs(arr, wFile);
printf("写入文件成功\n");
printf("字符串长度:%d\n", strlen(arr));
fclose(wFile);
return 0;
}
运行结果如下:
发现除了0123456789字符外,还打印了许多其他未知字符,此时字符串长度为15。那为什么会这样呢?
主要因为当字符串作为一个整体时,C编译系统会自动在字符串末尾加’\0’作为结束标志,通过判断字符串’\0’的位置作为判断字符串结束的标志,strlen()函数也是通过判断’\0’的位置计算字符串的长度,但是不会把’\0’也算作字符串的长度。所以当以字符串形式存入数组并写入新文件时,能够成功写入“012345678”,并打印出字符串长度为9,当以单个字符的形式处理时,编译系统并不会在最后一个字符后面再添加’\0’,当使用fputs()函数写入和strtlen()函数计算长度时,本身数组中不存在’\0’结束标志,那么计算机就会寻找内存空间中最近的一个’\0’作为结束停止写入和计算长度,就会出现结果和预先存入的不匹配的情况,当内存空间被使用,最邻近的’\0’发现变化时,此时012345678字符后面的可能是任意长度的字符,直到最邻近的’\0’结束,字符串长度也是相应的长度。
上述成立建立在数组空间满足存储字符串的要求才可以成功,那么如何是数组空间满足字符串要求呢?
之前说C编译系统会在字符串的末尾自动添加’\0’字符,所以数组空间应至少比字符串的长度大一个字符,也就是字符串长度为9时,数组空间应该至少为10,其中第10个字符位置是用来存储’\0’字符的。
字符串存入数组多次写入新文件
通过第一段程序我们知道在数组空间满足要求的情况下,可以通过fputs()函数向文本文件中写入一行数据,如下:
我们在第一段代码的基础上再次写入该字符串,共计写入两次字符串,代码如下:
int main()
{
//打开要写入的文件
char arr[] = "012345678";
//char arr[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8'};
FILE* wFile = fopen("demoput.txt","w");
if(NULL == wFile)
{
printf("文件打开失败\n");
return 0;
}
fputs(arr, wFile);
fputs(arr, wFile);
printf("写入文件成功\n");
printf("字符串长度:%d\n", strlen(arr));
fclose(wFile);
return 0;
}
运行结果如下:
我们发现是在第一次写完字符串的末尾继续写入该字符串,那么为什么没有在新的一行继续写入该字符串呢?
因为该字符串的末尾我们并没有添加换行符’\n’,所以字符串没有在下一行继续写入。我们在字符串末尾后添加换行符’\n’继续看一看效果,代码如下:
int main()
{
//打开要写入的文件
char arr[] = "012345678\n";
//char arr[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8'};
FILE* wFile = fopen("demoput.txt","w");
if(NULL == wFile)
{
printf("文件打开失败\n");
return 0;
}
fputs(arr, wFile);
fputs(arr, wFile);
printf("写入文件成功\n");
printf("字符串长度:%d\n", strlen(arr));
fclose(wFile);
return 0;
}
运行结果如下:
我们发现当写入一行字符串时,遇到字符串最后的换行符’\n’时,此时就会跳到下一行的位置,当我们继续写入字符串时,就会从下一行继续写入,实现换行写入的目的。此时字符串的长度为10,说明当我们向数组中存入字符串”012345678\n”后,编译系统自动在末尾添加了’\0’结束标志。
总结
当使用C语言编程时,编译系统会在字符串的末尾自动添加’\0’结束符作为结束标志,它也是判断一个字符串结束的标志。
换行符’\n’是实现数据写入文本实现换行的关键,在数据的末尾添加换行符’\n’后可以实现在写入数据的下一行继续写入。
今天的文章c语言空行符号_c语言空白字符有哪些[通俗易懂]分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/84542.html