C for linux如果值为负,则不重试
有以下代码示例:C for linux如果值为负,则不重试,c,linux,C,Linux,有以下代码示例: size_t value; value = (size_t) strtol(argv[1], NULL, 10); if (value <= 0) { fprintf(stderr, "Value cant be 0 or a negative value\n"); return 1; } 当我运行./prog-1时,它不会失败,值不能为0或负值,这对我来说没有意义。我错过什么了吗 如果运行./prog 0,它确实会失败,但如果参数为-,则不会失败
size_t value;
value = (size_t) strtol(argv[1], NULL, 10);
if (value <= 0) {
fprintf(stderr, "Value cant be 0 or a negative value\n");
return 1;
}
当我运行./prog-1时,它不会失败,值不能为0或负值,这对我来说没有意义。我错过什么了吗
如果运行./prog 0,它确实会失败,但如果参数为-,则不会失败。类型大小\u t等于无符号整数int或long。当您强制转换为大小\u t时,编译器应警告您有关不安全强制转换的信息
有关大小\u t的详细信息:size\u t是无符号类型,因此值不能为负。这里有一些详细信息,请确保您在编译时启用了警告,例如gcc-Wall…,然后您会收到此错误的警告:警告:无符号表达式的比较<0始终为假[-Wtautological compare]size_t是由几个C/C++标准定义的无符号数据类型。此类型用于表示对象的大小。int-C中的大小是多少实际上没有,但我知道了,用了int,它就行了。