#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<stdbool.h>
char output[17]={0};
const char* change_mac(char ch[100])
{
int i = 0;
int k = 0;
bool flag = false;
while(i < strlen(ch))
{
flag = false;
int j = 0;
while (j < 2)
{
if(ch[i] == ':' || strlen(ch) == i )
{
if(k != 0)
{
char temp = output[k-1];
output[k-1] = '0';
output[k] = temp;
}
flag = true;
}
else
{
output[k] = ch[i];
}
i++;
j++;
k++;
}
if(i < strlen(ch) && memchr(ch, ':', strlen(ch)))
{
output[k] = ':';
output[k+1] = '\0';
}
else{
output[k] = ch[i];
}
k++;
if(!flag)
{
i++;
}
}
output[k-1] = 0;
return output;
}
int main(int argc,char **argv)
{
char name[]="";
char ch[100] = "0:0:0:0:0:0";
if(sscanf(argv[1],"%s",ch) == 1)
{
name=change_mac(ch);
}
return 0;
}
/ 我想要获得MAC作为CMD线争论将其更改为正确的格式并将其存储到此“名称”变量中所以我可以在这里进一步使用它显示一些类型转换错误 /
/ *执行:./ a.out 0:c:f4:dr:4r:1 * /
答案 0 :(得分:4)
您忘了在'\0'
的末尾添加output[]
。在printf("%s\n",output);
之前添加以下代码:
output[k-1] = '\0';
下,
我不太确定,但如果代码如下,第二个功能会改变你:
if(i !=sizeof(ch))
{
output[k] = ':';
}
跟随(仅在':'
中存在时添加ch[]
)
if(i !=sizeof(ch) && memchr(ch, ':', sizeof(ch)))
{
output[k] = ':';
}
else{
output[k] = ch[i];
}
并包含头文件string.h
。
试一试!!如果您有其他疑问,请告诉我。
但是,是的,它不像你想要“尝试捕捉或错误处理”
修改强>
正如你在我的回答中评论的那样,我正在解决你的错误:
在printf("%s\n",output);
output[k-1] = 0;
if(memchr(ch, ':', sizeof(ch))==NULL){
output[k-2] = 0;
}
阳离子:这是修复此类错误的好方法,建议您重写代码
答案 1 :(得分:1)
你以错误的方式改变了你的问题:(
我已更正您的代码,如下所示:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
//char ch[] = {'0',':','1','0',':','1',':','C',':','B','F',':','9','8'};
char ch[] = {'a','b','c','d','e','f','g','f'};
char output[20]={0};
int i = 0;
int k = 0;
bool flag = false;
while(i < sizeof(ch))
{
flag = false;
int j = 0;
while (j < 2)
{
if(ch[i] == ':')
{
if(k != 0)
{
char temp = output[k-1];
output[k-1] = '0';
output[k] = temp;
}
flag = true;
}
else
{
output[k] = ch[i];
}
i++;
j++;
k++;
}
if(i !=sizeof(ch) && memchr(ch, ':', sizeof(ch)))
{
output[k] = ':';
output[k+1] = '\0';
}
else{ // added this else in your code
output[k] = ch[i];
}
k++;
if(!flag)
{
i++;
}
}
output[k-1] = 0; // added this
printf("%s\n",output);
printf("%d\n",sizeof(ch));
printf("%d\n",sizeof(output));
return 0;
}
它的工作好!
案例-1 如果char ch[] = {'a','b','c','d','e','f','g'};
~$ ./a.out
abcdefg
8
20
案例-2 如果char ch[] = {'0',':','9',':','1',':','C',':','B',':','9','8'};
:~$ ./a.out
00:10:01:0C:BF:98
14
20
虽然给代码不好,但是因为你从早上开始尝试我已经给了
答案 2 :(得分:0)
你的问题已经改变太多了:
您通过参数进行代码传递:
#include<stdio.h>
#include <string.h>
#include<stdlib.h>
void function(char* ch);
int main(int argc, char* argv[]){
if(argc!=2){
printf("\n wrong number arguments!\n");
exit(0);
}
function(argv[1]);
return 0;
}
void function(char* ch){
char output[20]={0};
int i = 0;
int k = 0;
bool flag = false;
while(i < strlen(ch))
{
flag = false;
int j = 0;
while (j < 2)
{
if(ch[i] == ':')
{
if(k != 0)
{
char temp = output[k-1];
output[k-1] = '0';
output[k] = temp;
}
flag = true;
}
else
{
output[k] = ch[i];
}
i++;
j++;
k++;
}
if(i !=strlen(ch) && memchr(ch, ':', strlen(ch)))
{
output[k] = ':';
output[k+1] = '\0';
}
else{
output[k] = ch[i];
}
k++;
if(!flag)
{
i++;
}
}
output[k] = 0;
/*for (i=0;i<sizeof(output);i++)
{
printf("%c", output[i]);
}*/
printf("%s\n",output);
}
运行此代码:
案例1 :
~$ ./a.out abcderf
abcderf
案例-2 :
:~$ ./a.out 0:9:1:C:B:98
00:09:01:0C:0B:98