我编写了一个程序来逐行反转.txt文件,并将输出返回到一个新文件。不包含.txt扩展名的命令行参数的要求的一部分,所以我在文件上调用fopen之前在程序的顶部添加。这在macOSx终端中运行得非常好,如下所示:https://imgur.com/a/HqUFd
但是,当我将其上传到学校的服务器时,我得到以下输出:https://imgur.com/a/rCdaI
相关代码:
public async Task<List<ChallengeData<T>>> BulkUpsertChallengeData<T>(string challengeIdentifier,
List<ChallengeData<T>> challengeDatas)
{
var updateStatements = new List<UpdateOneModel<ChallengeData<T>>>();
foreach (var challengeData in challengeDatas)
{
var updateStatement = new UpdateOneModel<ChallengeData<T>>(
Builders<ChallengeData<T>>.Filter.Where(p =>
p.ChallengeDataIdentifier == challengeData.ChallengeDataIdentifier),
Builders<ChallengeData<T>>.Update
.Set(p => p.CompanyIdentifier, challengeData.CompanyIdentifier)
.Set(p => p.ChallengeDataIdentifier, challengeData.ChallengeDataIdentifier)
.Set(p => p.ChallengeDataProviderType, challengeData.ChallengeDataProviderType)
.Set(p => p.DataType, challengeData.DataType)
.Set(p => p.DateForData, challengeData.DateForData)
.Set(p => p.Recipient, challengeData.Recipient)
.Set(p => p.Tags, challengeData.Tags)
.Set(p => p.Value, challengeData.Value)
.SetOnInsert(p => p.DateCreated, challengeData.DateCreated)
.Set(p => p.DateUpdated, challengeData.DateUpdated)
) {IsUpsert = true};
updateStatements.Add(updateStatement);
}
await Db.GetChallengeCollection<ChallengeData<T>>(challengeIdentifier).BulkWriteAsync(updateStatements);
return challengeDatas;
}
任何人都可以帮我弄清楚这里发生了什么吗?谢谢。
编辑解释为什么不同于链接问题:虽然知道为什么指向数组的指针不能被大小化是有帮助的,但我的问题是获取字符串的大小(一个指针,而不是一个指向一个指针的指针)指针)。我在我的Mac上使用strlen时出错,但它适用于unix。使用unix的sizeof时出错,但sizeof适用于我的mac。
答案 0 :(得分:1)
看来你的缓冲区溢出了,你可以看到打印的文件名显示已损坏。
如果你看一下这些线:
"author.id":req.user.id
您的错误在于使用sizeof运算符。这将返回类型的sizeof而不是字符串的长度。因此,你的in / outFileNameSize变量对于你复制到它的实际字符串来说太短了。