C中的字符串:给出一些逻辑错误 #包括 #包括 #包括 #包括 字符输出[17]={0}; const char*change_mac(char ch[100]) { int i=0; int k=0; 布尔标志=假; 而(i in IF,(i!=sizeof(ch)){output[k]=':';}2/ No.2中没有C的尝试/捕获构造,但是C++中。我不建议使用它,除了临界故障之外,因为它非常昂贵,并且在说真的时候是有用的。如果你想实现,尝试捕获一段时间,这个链接会很有用,第一个链接是有效的,但是第二个不是。它返回一些垃圾值。!!@user95711我已更改代码(答案)第二,我也检查了我的系统。它工作了!。请再次检查,不要忘记添加#包括为什么我们在while循环之后检查它?是否可以在while循环之前解析它?如果输入不是MAC地址,它不应该做任何处理并按原样返回它is@user95711更正此错误abadeg!!!,检查更新的答案…每次在下一个位置将char添加到output[]时,添加'\0'总是很好的,同时声明输出,如char output[128]={0}我已经更改了main()函数根据您的评论运行。请看问题第一个正在运行,第二个没有..它返回了一些垃圾值!!@user95711我已经更改了我的代码(答案)第二,我也检查了我的系统。它工作了!。请再次检查,不要忘记添加#包括为什么我们在while循环之后检查它?是否可以在while循环之前解析它?如果输入不是MAC地址,它不应该做任何处理并按原样返回它is@user95711更正此错误abadeg!!!,检查更新后的答案…每次添加'\0'都很好

C中的字符串:给出一些逻辑错误 #包括 #包括 #包括 #包括 字符输出[17]={0}; const char*change_mac(char ch[100]) { int i=0; int k=0; 布尔标志=假; 而(i in IF,(i!=sizeof(ch)){output[k]=':';}2/ No.2中没有C的尝试/捕获构造,但是C++中。我不建议使用它,除了临界故障之外,因为它非常昂贵,并且在说真的时候是有用的。如果你想实现,尝试捕获一段时间,这个链接会很有用,第一个链接是有效的,但是第二个不是。它返回一些垃圾值。!!@user95711我已更改代码(答案)第二,我也检查了我的系统。它工作了!。请再次检查,不要忘记添加#包括为什么我们在while循环之后检查它?是否可以在while循环之前解析它?如果输入不是MAC地址,它不应该做任何处理并按原样返回它is@user95711更正此错误abadeg!!!,检查更新的答案…每次在下一个位置将char添加到output[]时,添加'\0'总是很好的,同时声明输出,如char output[128]={0}我已经更改了main()函数根据您的评论运行。请看问题第一个正在运行,第二个没有..它返回了一些垃圾值!!@user95711我已经更改了我的代码(答案)第二,我也检查了我的系统。它工作了!。请再次检查,不要忘记添加#包括为什么我们在while循环之后检查它?是否可以在while循环之前解析它?如果输入不是MAC地址,它不应该做任何处理并按原样返回它is@user95711更正此错误abadeg!!!,检查更新后的答案…每次添加'\0'都很好,c,C,/我想把MAC作为CMD行,把它改成正确的格式,并把它存储在这个“name”变量中,这样我就可以进一步使用它了。这里显示了一些类型转换错误/ /*执行:./a.out 0:c:f4:dr:4r:1*/您忘记在输出[]的末尾添加'\0'。在printf之前(“%s\n”,输出)添加以下代码: #include<stdio.h> #include<string.h> #include<stdlib.h> #include<stdbool.h> char

/我想把MAC作为CMD行,把它改成正确的格式,并把它存储在这个“name”变量中,这样我就可以进一步使用它了。这里显示了一些类型转换错误/


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

您忘记在
输出[]
的末尾添加
'\0'
。在
printf之前(“%s\n”,输出)添加以下代码:

#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;
}
接下来,
我不太确定,但对于第二个功能,如果代码如下,请更改:

output[k-1] = '\0';    
添加到以下内容(添加
:'
仅当它出现在
ch[]
中时)

并包含一个头文件
string.h

试试看!!如果你还有其他疑问,请告诉我

但是,是的,它不像你想要的那样“尝试捕捉或错误处理”

编辑
正如您在我的回答中所评论的那样,我正在纠正您的错误:
在printf之前添加以下代码(“%s\n”,输出)

if(i !=sizeof(ch) && memchr(ch, ':', sizeof(ch)))
{
     output[k] = ':';
}
else{
    output[k] = ch[i];
}  

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

您忘记在
输出[]
末尾添加
'\0'
。在
printf之前(“%s\n”,输出)添加以下代码:

#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;
}
接下来,
我不太确定,但对于第二个功能,如果代码如下,请更改:

output[k-1] = '\0';    
添加到以下内容(添加
:'
仅当它出现在
ch[]
中时)

并包含一个头文件
string.h

试试看!!如果你还有其他疑问,请告诉我

但是,是的,它不像你想要的那样“尝试捕捉或错误处理”

编辑
正如您在我的回答中所评论的那样,我正在纠正您的错误:
在printf之前添加以下代码(“%s\n”,输出)

if(i !=sizeof(ch) && memchr(ch, ':', sizeof(ch)))
{
     output[k] = ':';
}
else{
    output[k] = ch[i];
}  

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

您以错误的方式更改了问题:(

我已将您的代码更正如下:

output[k-1] = 0;
if(memchr(ch, ':', sizeof(ch))==NULL){
        output[k-2] = 0;
} 
case-2if
charch[]={0'、':'、'9'、':'、'1'、':'、'C'、':'、'B'、':'、'9'、'8'};

~$ ./a.out 
abcdefg
8
20

虽然给出代码并不好,但因为您从早上开始就在尝试,所以我给出了

您以错误的方式更改了您的问题:(

我已将您的代码更正如下:

output[k-1] = 0;
if(memchr(ch, ':', sizeof(ch))==NULL){
        output[k-2] = 0;
} 
case-2if
charch[]={0'、':'、'9'、':'、'1'、':'、'C'、':'、'B'、':'、'9'、'8'};

~$ ./a.out 
abcdefg
8
20

虽然给出代码并不好,但因为您从早上开始就在尝试,我已经给出了

您已经多次更改了您的问题:

您可以编写传递参数的代码:

:~$ ./a.out 
00:10:01:0C:BF:98
14
20
案例2

~$ ./a.out  abcderf
abcderf

您已多次更改您的问题:

您可以编写传递参数的代码:

:~$ ./a.out 
00:10:01:0C:BF:98
14
20
案例2

~$ ./a.out  abcderf
abcderf

您必须检查
in
ch[]
in-if,
if(i!=sizeof(ch)){output[k]=':';}2/ No.2中没有C的尝试/捕获构造,但是C++中没有。我不建议使用它,除了临界故障之外,因为它是非常昂贵的,并且在说“真”时……如果你想实现,尝试捕获一段时间,这个链接将是有用的,并且你必须检查<代码>:<代码> <代码> CH []代码> in IF,<代码>(i!=sizeof(ch)){output[k]=':';}2/ No.2中没有C的尝试/捕获构造,但是C++中。我不建议使用它,除了临界故障之外,因为它非常昂贵,并且在说真的时候是有用的。如果你想实现,尝试捕获一段时间,这个链接会很有用,第一个链接是有效的,但是第二个不是。它返回一些垃圾值。!!@user95711我已更改代码(答案)第二,我也检查了我的系统。它工作了!。请再次检查,不要忘记添加
#包括
为什么我们在while循环之后检查它?是否可以在while循环之前解析它?如果输入不是MAC地址,它不应该做任何处理并按原样返回它is@user95711更正此错误
abadeg!!!
,检查更新的答案…每次在下一个位置将
char
添加到
output[]
时,添加
'\0'
总是很好的,同时声明输出,如
char output[128]={0}
我已经更改了main()函数根据您的评论运行。请看问题第一个正在运行,第二个没有..它返回了一些垃圾值!!@user95711我已经更改了我的代码(答案)第二,我也检查了我的系统。它工作了!。请再次检查,不要忘记添加
#包括
为什么我们在while循环之后检查它?是否可以在while循环之前解析它?如果输入不是MAC地址,它不应该做任何处理并按原样返回它is@user95711更正此错误
abadeg!!!
,检查更新后的答案…每次添加
'\0'
都很好