У меня есть файл трассировки, где есть n строк, каждая из которых имеет последовательность чтения / записи, за которой следует шестнадцатеричный 32-битный адрес. Примерно так:
read 0x20000064
write 0x20000068
read 0x2000006c
Я не могу извлечь только 32-битный адрес и чтение / запись, например, 20000064
из файла для каждой строки. Итак, я намереваюсь прочитать строку за строкой из файла trace , а затем разделить каждую строку на две подстроки и предпринять некоторые действия на основе подстроки.
// Read the second part of sub-string and store as str1
address = str1 & 0xffff;
// read first part of sub-string and store as str0
if (str0 == read)
read_count++;
else if (str0 == write)
write_count++;
Итак, Короче говоря, я застрял в разделении струны на две части и работе над ними. Я перепробовал все, от strtok()
до fseek()
, но ничего не работает.
У меня есть файл трассировки с содержимым
read 0x20000064
write 0x20000084
read 0x20000069
write 0x20000070
read 0x20000092
И код, который я пробовал
#include <stdio.h>
#include <string.h>
int main() {
FILE *fp;
int i = 0, j = 0, k = 0, n;
char *token[30];
char delim[] = " ";
char str[17], str2[17];
char str3[8];
fp = fopen("text", "r");
while(fgets(str, 17, fp) != NULL) {
fseek(fp, 0, SEEK_CUR);
strcpy(str2, str);
i = 9;
n = 8;
while (str[i] !='\0' && n >= 0) {
str3[j] = str2[i];
i++;
j++;
n--;
}
str3[j] = '\0';
printf("%s\n", str3);
}
fclose(fp);
}
PS Этот код работает, но только для первой строки, после этого у меня возникает ошибка сегментации.
#include <stdio.h>
#include <string.h>
int main() {
FILE *fp;
int i;
char *token[30];
char delim[] = " ";
char str[17], str2[100][17];
char str3[17];
int n = 9, pos = 0;
fp = fopen("text", "r");
while (fgets(str, 17, fp) != NULL) {
fseek(fp, 0, SEEK_CUR);
strcpy(str2[i], str);
if ((n + pos - 1) <= strlen(str2[i])) {
strcpy(&str2[i][pos - 1], &str2[i][n + pos - 1]);
printf("%s\n", str2[i]);
}
i++;
}
fclose(fp);
}
Выходные данные:
20000064
Segmentation fault
Выход I ожидайте:
20000064
20000084
20000069
20000070
20000092