c - 从文本文件 (C) 读取时字符串长度发生变化

标签 c text-files string-length

我的问题是这样的: 我制作了一个 char 数组,假设它的长度是 A,然后我将这个数组写入文件,然后从同一个文件中读取它,它的长度不再是 A,它更大.. 源代码:

char encrypted1[] = "abcdefghijklmnopqrstuvqwxyz";
int encrypted1_len;
char *encrypted;
int encrypted_len;
encrypted1_len = strlen((char*)encrypted1);

f_cypher = fopen(CYPHER_FILE, "w");
fprintf(f_cypher, "%s", encrypted1);
fclose(f_cypher);

stat(CYPHER_FILE, &st);
size = st.st_size;
encrypted = malloc(size * sizeof *encrypted);
f_cypher = fopen(CYPHER_FILE, "r");
len = fread(encrypted, 1, size, f_cypher);
encrypted1[len] = '\0';
fclose(f_cypher);

encrypted_len = strlen((char*) encrypted);
printf("%s", encrypted);

在这个例子中,长度是 27,然后是 40。

最佳答案

您没有为读回的字符串分配足够的空间。您的 encrypted1 有 26 个字符和一个\0 字符串结束标记,即 27。现在您将这 26 个字节写入文件(执行 ls -l - 检查 26),分配 26 个字节,并将 encrypted1[len] 设置为 '\0',这是您尚未分配的内存。从现在开始,任何奇怪的事情都可能发生。将 malloc 中的 size 更改为 (size+1) 看看会发生什么。

关于c - 从文本文件 (C) 读取时字符串长度发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20527825/

相关文章:

使用指针输入结构值时 scanf 函数中的混淆

c - 在不使用库的情况下,如何在 C 中将 float 舍入到两个位置?

C# - 从 List3 中删除 List1 和 List2 中的项目时出现问题

php - Zend_Validate_StringLength 编码?

javascript - 如果 div 的字符串长度大于 10,则字体大小较小

c - 指针魔术: structs with pointer members and more

c - 为什么文件描述符 1 和 2 可以在手动输入时读取,但在输入重定向时却不能读取?

python - 如何在Python中循环时向下读取几行?

python - 最有效的方法是从文本文档中获取 "nibble"第一行文本,然后将其重新保存在 python 中

ios - swift 2.2 中字符串的长度(按字节计算)