为什么这段代码在与 bin 一起使用时会崩溃?
WHy does this code crash, when used with bin?
正如标题所说,我不知道我的错误在哪里
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char binary[360];
void printstringasbinary(char* s)
{
// A small 9 characters buffer we use to perform the conversion
char output[9];
while (*s)
{
// Convert the first character of the string to binary using itoa.
// Characters in c are just 8 bit integers, at least, in noawdays computers.
itoa(*s, output, 2);
strcat(binary, output);
++s;
}
}
int main(int argc, char *argv[])
{
int i, n;
//printf("argc: %i\n", argc);
if (argc != 3)
{
puts("Converter [Text] [hex|dec|bin]");
return 0;
}
FILE *f = fopen("Output.txt", "a");
for (i = 0; i < strlen(argv[0]); i++)
{
if (strcmp(argv[2], "hex") == 0)
fprintf(f, "%X ", (unsigned int) argv[1][i]);
else if (strcmp(argv[2], "dec") == 0)
fprintf(f, "%i ", (unsigned int) argv[1][i]);
else if (strcmp(argv[2], "bin") == 0)
for (n = 0; n < strlen(argv[1]); n++)
{
printstringasbinary(argv[1][i]);
}
fprintf(f, "%s ", binary);
}
fclose(f);
return 0;
}
您遍历 argv[1][i]
的字符,而 i
的值最大可达 argv[0]
的字符串长度。根据 argv[0]
是 "longer" 还是 argv[1]
,这可能会导致段错误。
您是指 printstringasbinary(argv[1][n])
而不是 printstringasbinary(argv[1][i])
吗?顺便说一句:为什么 - 正如有限合伙人所指出的那样 - 你是否遍历了 argv[1]
?
for (i = 0; i < strlen(argv[0]); i++)
....
for (n = 0; n < strlen(argv[1]); n++)
{
printstringasbinary(argv[1][n]);
}
正如标题所说,我不知道我的错误在哪里
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char binary[360];
void printstringasbinary(char* s)
{
// A small 9 characters buffer we use to perform the conversion
char output[9];
while (*s)
{
// Convert the first character of the string to binary using itoa.
// Characters in c are just 8 bit integers, at least, in noawdays computers.
itoa(*s, output, 2);
strcat(binary, output);
++s;
}
}
int main(int argc, char *argv[])
{
int i, n;
//printf("argc: %i\n", argc);
if (argc != 3)
{
puts("Converter [Text] [hex|dec|bin]");
return 0;
}
FILE *f = fopen("Output.txt", "a");
for (i = 0; i < strlen(argv[0]); i++)
{
if (strcmp(argv[2], "hex") == 0)
fprintf(f, "%X ", (unsigned int) argv[1][i]);
else if (strcmp(argv[2], "dec") == 0)
fprintf(f, "%i ", (unsigned int) argv[1][i]);
else if (strcmp(argv[2], "bin") == 0)
for (n = 0; n < strlen(argv[1]); n++)
{
printstringasbinary(argv[1][i]);
}
fprintf(f, "%s ", binary);
}
fclose(f);
return 0;
}
您遍历 argv[1][i]
的字符,而 i
的值最大可达 argv[0]
的字符串长度。根据 argv[0]
是 "longer" 还是 argv[1]
,这可能会导致段错误。
您是指 printstringasbinary(argv[1][n])
而不是 printstringasbinary(argv[1][i])
吗?顺便说一句:为什么 - 正如有限合伙人所指出的那样 - 你是否遍历了 argv[1]
?
for (i = 0; i < strlen(argv[0]); i++)
....
for (n = 0; n < strlen(argv[1]); n++)
{
printstringasbinary(argv[1][n]);
}