Новичок здесь, несколько смущен насчет упражнения: Tutorial Последний на странице (это немецкий). Я должен читать HTML-строки и атрибуты печати и их значения. Дается объявление функции, которая должна использоваться.
Меня раздражают две вещи:
1. Линия хранится в строке const char, но я бы хотел, чтобы Пользователь напечатал нужную HTML-строку. Кажется, не удастся изменить переменную const во время выполнения. Как это может быть достигнуто без изменения данной декларации?
2. Учебное пособие хочет, чтобы я вернул позицию strtok-поиска как целое число, но я читал в Интернете, что это значение хранится в strtok, есть ли способ сделать это или получить его каким-то образом?Обучение c получение указателя позиции из strtok as int
Чтобы решить упражнение, я написал этот код, но программа вылетает во время выполнения с «Ошибка сегментации (ядро сбрасывается)» - сообщение, и я не знаю, почему, может кто-нибудь объяснить это мне? (Я, вероятно, нужно таНос, но для какой переменной?)
//cHowTo Uebung Teil 2 Nr. 4
//HTMLine.c
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//char getHTMLline();
int getHtmlAttributes(const char *string, int start, char *attrNamem,char *attrValue); //given by Tutorial
int main(int argc, char *argv) //because i want user-input later on, if possible
{
const char strg[]= {"<img src=\"kurt.jpg\" width=\"250\" alt=\"Kurt Kanns\" />"}; //given example line by tutorial
char attriN[255]={0}, attriV[255]={0};
int pos=99;
//printf("Please type the tag for analysis.\n");
//fgets(strg, 255, stdin);
printf("attribute\tvalue\n\n");
do
{
pos = getHtmlAttributes(strg, pos, attriN, attriV); //pos should be strtok-search-position
printf("%s\t\t%s\n", attriN, attriV);
}
while(pos!=1);
return EXIT_SUCCESS;
}
int getHtmlAttributes(const char *string, int start, char *attrNamem, char *attrValue)
{
int i, len;
char *ptr;
len = strlen(string);
char stringT[len]; //variable used to be split by strtok
for(i=0; i<len; i++)
stringT[i]=string[i];//copy string to stringT
if(start==99)
ptr = strtok(stringT, "<="); //get first attribute as whole
else
ptr = strtok(NULL, "= "); // get following attributes
for(i=0; i<len; i++)
attrNamem[i] = ptr[i];
ptr = strtok(NULL, "\""); //get values
for(i=0; i<len; i++)
attrValue[i] = ptr[i];
if(ptr == NULL) //if search complete
{
return 1;
}
else // if search continues
{
return 0;
}
}
//char getHTMLline()
//{
// char user_input;
// scanf("%s", &user_input);
// return user_input;
//}
Запустите его в отладчике или выбросьте в какой-либо файл printf(), чтобы сузить место, где он сбой. – John3136
Вам необходимо выделить память для 'attrName' и 'attrValue', которые вы вернетесь. Вернитесь на страницу учебного пособия о массивах и/или 'char *' -строчных строках и перечитайте их :) – us2012
Я думал, что было бы (достаточно) память зарезервирована с помощью 'char attriN [255] = {0}, attriV [ 255] = {0}; ' – rrrrn