C无法在Unix中打开文件,但在macOSx上运行正常

时间:2017-10-19 22:11:20

标签: c file-io fopen

我编写了一个程序来逐行反转.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。

1 个答案:

答案 0 :(得分:1)

看来你的缓冲区溢出了,你可以看到打印的文件名显示已损坏。

如果你看一下这些线:

"author.id":req.user.id

您的错误在于使用sizeof运算符。这将返回类型的sizeof而不是字符串的长度。因此,你的in /​​ outFileNameSize变量对于你复制到它的实际字符串来说太短了。