简单的问题:我应该从控制台读取一些变量,但我不能使用Console类。所以我写的是这样的东西
using System;
using System.Runtime.InteropServices;
namespace ConsoleApplication153
{
class Program
{
static unsafe void Main()
{
printf("%s" + Environment.NewLine, "Input a number");
int* ptr;
scanf("%i", out ptr);
printf("%i", (*ptr).ToString());
}
[DllImport("msvcrt.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern void printf(string format, string s);
[DllImport("msvcrt.dll", CallingConvention = CallingConvention.Cdecl)]
private static unsafe extern void scanf(string format, out int* ptr);
}
}
但它因NullReferenceException而失败。请帮忙,我该怎么办? Printf工作,但scanf - 没有。 TNX
好。完整的任务听起来像这样:“如何从用户获取变量并使用Console类在C#withoud中打印它的值。”
答案 0 :(得分:1)
对于%i
,您需要将指针传递给整数。您正在传递一个指向未初始化指针的指针。不好。
声明这样的函数:
[DllImport("msvcrt.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern void scanf(string format, out int value);
将int作为out
参数传递是通过将指针传递给int
来实现的。
这样称呼:
scanf("%i", out value);
这里不需要不安全的代码。
如果您要传递字符串,也需要将%s
传递给printf
,就像第二次调用printf
时一样。