C - char数组的内容意外更改

时间:2015-10-12 05:09:02

标签: c arrays function pointers file-io

我有一些代码用于更大的程序,它得到用户的输入,然后应该将该输入写入文件,但是在写入文件之前/期间,数据会以某种方式丢失。

list<MyData> mylist;

private void StartTransmit(ObservableCollection<WiresharkFile> files)
        {
    cancellationTokenSource = new CancellationTokenSource();
    var token = cancellationTokenSource.Token;
    Task.Factory.StartNew(() =>
    {
        try
        {
                Parallel.For(0, files.Count, new ParallelOptions { MaxDegreeOfParallelism = 5},
                i =>
                {
                    if (token.IsCancellationRequested)
                        return;

                    //do work...
                    files[i].ProcessFile();
                });
        }
        catch (Exception e)
        { }

    }, cancellationTokenSource.Token,
   TaskCreationOptions.None,
   TaskScheduler.Default).ContinueWith(
        t =>
        {

        }
    );
}

输出函数中的print语句输出与此图像类似的内容,无论输入

enter image description here

所以它会打印出所需的文字内容&#39;在这些内容以预期的方式使用之前,它然后用任何东西替换那些内容,并且只在文本文档中写入换行符,然后在下一个打印语句中,文本变成一个奇怪的重音字符(每次程序都是变化的)运行)。

所以我相信我错误地使用了指针,或者我以一种奇怪的方式从函数返回char数组。

1 个答案:

答案 0 :(得分:0)

textPtr=input();在函数input返回时释放的堆栈上返回一个新指针,然后再次使用该内存(堆栈)。 要解决此问题,您必须将textPtr作为input

的参数传递
input(textPtr);//the call

input(char * textPtr){//the function
    fflush(stdin);//Clears the newline character left by any prevoius scanf statements
    scanf("%[^\n]s",textPtr);
}