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

/ CMD行がMACを適切な形式に変更してこの「名前」変数に保存すると主張しているので、ここでさらに使用できると思います。型キャストエラーが表示されます/

/* 実行 : ./a.out 0:c:f4:dr:4r:1 */

4

3 に答える 3

4

'\0'の最後に追加するのを忘れましたoutput[]printf("%s\n",output);次のコードを追加する 前に:

output[k-1] = '\0';    

次に、
よくわかりませんが、2番目の機能については、以下のコードの場合に変更してください。

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

その動作は良好です!

ケース-1char ch[] = {'a','b','c','d','e','f','g'};

~$ ./a.out 
abcdefg
8
20

ケース 2char 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 に答える