如何在C中正确地将char*复制到unsigned char*.以下是我的代码
int main(int argc, char **argv)
{
unsigned char *digest;
digest = malloc(20 * sizeof(unsigned char));
strncpy(digest, argv[2], 20);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我想正确地将char*数组复制到unsigned char*数组.我使用上面的代码得到以下警告
warning: pointer targets in passing argument 1 of âstrncpyâ differ in signedness
Run Code Online (Sandbox Code Playgroud)
编辑:添加更多信息,我的要求是调用者在主函数中提供SHA摘要作为命令行上的字符串,主函数在内部将其保存在摘要中.SHA摘要可以使用unsigned char最好地表示.
现在的问题是我无法更改main函数(**char)的签名,因为main函数解析了它需要的其他参数作为char*而不是unsigned char*.
我们有一个文件存储空间,存储空间根据附加到crc32的大小唯一标识文件.
我想知道这个校验和(crc32 + size)是否足以识别文件,还是应该考虑其他一些散列技术,如MD5/SHA1?
是否存在任何C++编译时宏来检测正在编译代码的Windows操作系统.我基本上只想在Win7上支持某些功能.所以我有兴趣做这样的事情
#if <os_macro> = WIN7
// This function would do something valid only on Win7 builds.
bool myfunction {
// do something here
}
#else
// This function would typically return false, since its not supported on OS below win7
bool myfunction {
return false;
}
#endif
Run Code Online (Sandbox Code Playgroud)
还有其他更好的方法吗?
有谁知道Java如何能够规避Windows MAX_PATH限制.使用下面的代码,我能够在Java中创建一个非常长的路径,并且能够执行I/O,这在使用没有前缀\\?\的Windows时是不可能的.
public static void main(String[] args) throws IOException {
BufferedWriter bufWriter = null;
try {
StringBuilder s = new StringBuilder();
for (int i = 0; i < 130; i++) {
s.append("asdf\\");
}
String filePath = "C:\\" + s.toString();;
System.out.println("File Path = " + filePath);
File f = new File(filePath);
f.mkdirs();
f = new File(f, "dummy.txt");
System.out.println("Full path = " + f);
bufWriter = new BufferedWriter(new FileWriter(f));
bufWriter.write("Hello");
}
catch (Exception e) {
e.printStackTrace();
}
finally {
if (bufWriter != …Run Code Online (Sandbox Code Playgroud) 我们正在开发一个程序,它应该接受同一个参数的多个输入.例如.
program1 -A arg1 -A arg2 -A arg3 -B arg4 -B arg5 -B arg6
更复杂的是,-A和-B参数具有1:1的关系.所以arg1映射到arg4,所以一个.
那么上面的例子是最好的方法可以提供多个相同的参数列表吗?或者这是可接受的方式?