这是代码
#include <stdio.h>
//#include "ConvertEndianess.h"
typedef unsigned char uint8_t;
void ConvertEndianess(uint8_t* buffAddr, uint8_t length);
void ConvertEndianess(uint8_t *buffAddr, uint8_t length)
{
uint8_t i;
uint8_t data;
for (i = 0U; i < (length / 2U); i++)
{
data = buffAddr[i];
buffAddr[i] = buffAddr[(length - 1U) - i];
buffAddr[(length - 1U) - i] = data;
}
}
int main(int argc, char *argv[]){
printf("\nNumber Of Arguments Passed: %d\n",argc);
if(argc < 3){
printf("Too Few Arguments\n");
}
else if(argc > 3){
printf("Too Many Arguments\n");
}
else{
printf("data indianess: %s\n",argv[1]);
ConvertEndianess((uint8_t *)&argv[1], (uint8_t)(*argv[2]));
printf("data indianess: %s\n",argv[1]);
}
}
这是我的论点:
./a 11223344 4
在进入转换 API 之前它打印正确,但可能是我犯了一些转换错误,我无法识别它。
有人可以纠正我的错误并解释一下吗?
最佳答案
(uint8_t)(*argv[2])
argv[2]
是一个 char *
,根据您的程序的运行方式,我假设它应该包含缓冲区的大小。由于这是一个字符串 (char *),并且您希望将其转换为数字,因此您需要使用 sscanf 来获取此值:
使用示例:
size_t len;
sscanf(str, "%zu", &len);
然后将 len
作为转换函数的第二个参数传递。
您目前的做法是传递 argv[2]
第一个字符的 ASCII 代码。因此,如果用户说大小是“7”
,那么您实际上是将整数55
传递给转换函数。
作为旁注,使用 size_t
来表示大小,而不是 uint8_t
。
关于c - 为什么在命令行参数的情况下将命令 char 双指针转换为 char 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52257039/