ここの初心者は、演習についてやや混乱しています:
チュートリアルページの最後のもの (ドイツ語です)。HTML-Lines を読み取り、属性とその値を出力する必要があります。使用すべき関数の宣言が与えられます。
2 つのことが私をいらいらさせます:
1. Line は const char 文字列に格納されていますが、ユーザーに目的の HTML 行を入力してもらいたいです。実行時に const 変数を変更することはできないようです。指定された宣言を変更せずにどのように達成できますか?
2. チュートリアルでは、strtok-search の位置を整数として返すよう求めていますが、この値が strtok 内に格納されていることをオンラインで読みました。それをキャストする方法、または何らかの方法で取得する方法はありますか?
演習を解決するためにこのコードを書きましたが、実行時にプログラムがクラッシュし、「セグメンテーション違反 (コア ダンプ)」というメッセージが表示され、理由がわかりません。誰か説明してもらえますか? (おそらくmallocが必要ですが、どの変数に対してですか?)
//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;
//}