1
#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 */

4

3 回答 3

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;
} 

阳离子:这不是修复此类错误的好方法,建议您重写代码

于 2013-01-21T06:38:08.850 回答
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

虽然给代码不好,但是因为你从早上就开始尝试我给了

于 2013-01-21T10:21:19.850 回答
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
于 2013-01-22T05:53:47.280 回答