gpt4 book ai didi

c - 在 C 中打印数组的值

转载 作者:行者123 更新时间:2023-12-02 08:19:24 25 4
gpt4 key购买 nike

我在打印数组内容时遇到问题。每次我想打印它们时,我都会遇到段错误(查看注释代码)。这是为什么?

#include <stdio.h>
int main(int argc, char* argv[])
{
char const* const fileName = argv[1];
FILE* file = fopen(fileName, "r");
char line[256];
char str1[10], str3[10];
int str2[10], str4[10];
while (fgets(line, sizeof(line), file)) {
printf("The Full Line is: %s", line);
sscanf(line,"%s -> %s", str1,str3);
printf("First is: %s \n", str1);
printf("Thirs is : %s\n", str3);
}
fclose(file);
// printf("%s", str1[0]);
// for (int i=0; i<4; i++){
// printf("This is it!!! %s ", str1[i]);
// }
return 0;
}

输入文本文件包含:

main+0x20 -> main+0x10
function1 -> function2+0x20
function2+0x34 -> function3

或更复杂的:

Function2+0x22 -> main+0x92
main -> main+0x22
Function2 -> vuln+0x12
main+0x86 -> Function1
main+0x86 -> main+0x92
Function1+0x12 -> Function2+0x22
func1+0x10 -> main+0x76
dummya -> func1+0x10
main+0x6a -> main+0x76
main+0x6a -> func1
main+0x76 -> main+0x86
main+0x22 -> main+0x3a
main+0xa2 -> main+0xae
func1 -> dummya
func1 -> func1+0x10
main+0x92 -> main+0xa2
main+0x3a -> main+0x52
main+0x52 -> main+0x6a

我可以将这些值放入二维数组中吗?然后打印出来。如果是怎么办?

我想要这样的输出:

Array1[1]= main
Array2[1]=0x20 //in int
Array3[1]=main
Array4[1]=0x10 //in int

Array1[2]=Function1
Array2[2]=0 //in int
Array3[2]=Function2
Array4[2]=0x20 //in int

Array1[3]=Function2
Array2[3]=0x34 //int
Array3[3]=Function3
Array4[3]=0
//Continue until EOF

最佳答案

%s 的使用假定指针指向以空符号结尾的字符数组。但是您给 char 而不是指向 char 的指针。

如果你需要一个符号 - 你应该使用 %c:

printf("%c", str1[0]);
for (int i=0; i<4; i++){
printf("This is it!!! %c ", str1[i]);
}

如果您需要带偏移量的字符串 - 您应该使用指针:

printf("%s", &str1[0]);
for (int i=0; i<4; i++){
printf("This is it!!! %s ", &str1[i]);
}

参见 printf reference .

编辑 1:

Solved...

#include <stdio.h>
#define MAX_LINE_CNT 3
int main(int argc, char* argv[])
{
char const* const fileName = argv[1];
FILE* file = fopen(fileName, "r");
char line[256];
char i, cnt = 0;
char str1[MAX_LINE_CNT][10], str3[MAX_LINE_CNT][10], * tmp;
int arr2[MAX_LINE_CNT], arr4[MAX_LINE_CNT];
while (fgets(line, sizeof(line), file)) {
tmp = strstr(line," -> ");
arr2[cnt] = 0; arr4[cnt] = 0;
sscanf(line,"%[^+ ]%x%*s", str1[cnt],&arr2[cnt]);
sscanf(tmp," -> %[^+ ]%x%*s", str3[cnt],&arr4[cnt]);
//cnt++;
if (++cnt >= MAX_LINE_CNT) break;
}
fclose(file);
for (i = 0; i < cnt; i++) {
printf("Array1[%d] %s \n", i+1, str1[i]);
printf("Array2[%d] %x \n", i+1, arr2[i]);
printf("Array3[%d] %s \n", i+1, str3[i]);
printf("Array4[%d] %x \n", i+1, arr4[i]);
}
return 0;
}

编辑 2:

强烈建议阅读 chux 的答案和 c/c++ 引用,以了解您在做什么以及编译后到底发生了什么。

关于c - 在 C 中打印数组的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38697197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com