{"id":13444,"date":"2022-10-04T02:25:32","date_gmt":"2022-10-03T20:55:32","guid":{"rendered":"https:\/\/jassweb.com\/solved\/solved-run-time-error-storing-pointer-character-from-strtok-after-multiple-calls\/"},"modified":"2022-10-04T02:25:32","modified_gmt":"2022-10-03T20:55:32","slug":"solved-run-time-error-storing-pointer-character-from-strtok-after-multiple-calls","status":"publish","type":"post","link":"https:\/\/jassweb.com\/solved\/solved-run-time-error-storing-pointer-character-from-strtok-after-multiple-calls\/","title":{"rendered":"[Solved] Run-time error storing pointer character from strtok after multiple calls"},"content":{"rendered":"<p> [ad_1]<br \/>\n<\/p>\n<div id=\"answer-65710939\" class=\"answer js-answer accepted-answer js-accepted-answer\" data-answerid=\"65710939\" data-parentid=\"65710780\" data-score=\"2\" data-position-on-page=\"1\" data-highest-scored=\"1\" data-question-has-accepted-highest-score=\"1\" itemprop=\"acceptedAnswer\" itemscope itemtype=\"https:\/\/schema.org\/Answer\">\n<div class=\"post-layout\">\n<div class=\"votecell post-layout--left\"><\/div>\n<div class=\"answercell post-layout--right\">\n<div class=\"s-prose js-post-body\" itemprop=\"text\">\n<p>Remember that <code>strtok<\/code> <em>modifies<\/em> the buffer.<\/p>\n<p>The caller to your functions would have to pass a <em>temporary<\/em> buffer that has been copied from the original <em>before<\/em> each call.<\/p>\n<p>In other words, the call to <code>ModifiedStringSize<\/code> trashes <code>inputString<\/code> so that when you call <code>ManipulateString<\/code>, the updated value for <code>inputString<\/code> is [effectively] garbage.<\/p>\n<p>The usual here is to parse a buffer only <em>once<\/em> and retain a <code>char **<\/code> array that is built up from the <code>strtok<\/code> loop.<\/p>\n<hr>\n<p><strong>UPDATE:<\/strong><\/p>\n<blockquote>\n<p>Sorry, I&#8217;m still learning C and I&#8217;m not really that good with pointers. How exactly do I implement this?<\/p>\n<\/blockquote>\n<p>There are basically <em>two<\/em> ways to do this:<\/p>\n<ol>\n<li>Caller passes a pointer to a fixed size <code>char **<\/code> array that the subfunction fills in with tokens [for a <em>given<\/em> line]<\/li>\n<li>The subfunction uses <code>malloc\/realloc<\/code> to create and maintain a dynamically increasing list of tokens. It <em>returns<\/em> a pointer to that array.<\/li>\n<\/ol>\n<p>Option (1) is easier\/simpler and is suitable for line-at-a-time processing. That is, all necessary processing can be done without having to combine multiple lines of input (e.g. this is probably suitable for your use case).<\/p>\n<p>Option (2) is used if we have to read an <em>entire<\/em> multiline file and store <em>all<\/em> lines before doing any processing. <em>Or<\/em>, we can <em>not<\/em> predict how many tokens we&#8217;ll need before attempting to parse. It is the <em>caller&#8217;s<\/em> responsibility to call <code>free<\/code> on the array elements and the array pointer itself.<\/p>\n<p>Note that I had to refactor your code a bit.<\/p>\n<hr>\n<p>Here&#8217;s the first method:<\/p>\n<pre><code>\/\/ Inputs a string with a maximum of 100 characters\n\/\/ tokenizes it and converts it to pig latin in a new string\n#include &lt;stdio.h&gt;\n#include &lt;string.h&gt;\n#include &lt;ctype.h&gt;\n\n#define SIZE        1000\n#define DELIMS      \" \\t\\n\"\n\nvoid piglatin(char *pig,const char *inp);\nvoid pigall(char **toklist);\n\n\/\/ parse_string -- parse a line into tokens\n\/\/ RETURNS: actual count\nint\nparse_string(char *inputString,char **toklist,int tokmax)\n{\n    char *bp = inputString;\n    char *cp;\n    int tokcount = 0;\n\n    \/\/ allow space for NULL terminator\n    --tokmax;\n\n    while (1) {\n        cp = strtok(bp,DELIMS);\n        bp = NULL;\n\n        if (cp == NULL)\n            break;\n\n        if (tokcount &gt;= tokmax)\n            break;\n\n        toklist[tokcount++] = cp;\n    }\n\n    \/\/ add end of list\n    toklist[tokcount] = NULL;\n\n    return tokcount;\n}\n\nint\nmain(void)\n{\n    \/\/ inputString is where\n    \/\/ string entered by user\n    \/\/ is stored\n    char inputString[SIZE];\n\n    char pig[SIZE];\n\n    \/\/ some simple tests\n    piglatin(pig,\"pig\");\n    piglatin(pig,\"smile\");\n    piglatin(pig,\"omelet\");\n\n    \/\/ fgets reads up to 100\n    \/\/ characters into inputString\n    printf(\"Enter phrase: \");\n    fflush(stdout);\n    fgets(inputString, SIZE, stdin);\n\n    \/\/ define the worst case number of tokens that are possible (e.g. each\n    \/\/ token is one char)\n    char *toklist[((SIZE + 1) \/ 2) + 1];\n\n    \/\/ parse the string into tokens\n    int tokcount = parse_string(inputString,toklist,\n        sizeof(toklist) \/ sizeof(toklist[0]));\n    printf(\"tokcount is %d\\n\",tokcount);\n\n    \/\/ translate all tokens into pig latin\n    pigall(toklist);\n\n    return 0;\n}\n<\/code><\/pre>\n<hr>\n<p>Here&#8217;s the second method:<\/p>\n<pre><code>\/\/ Inputs a string with a maximum of 100 characters\n\/\/ tokenizes it and converts it to pig latin in a new string\n#include &lt;stdio.h&gt;\n#include &lt;stdlib.h&gt;\n#include &lt;string.h&gt;\n#include &lt;ctype.h&gt;\n\n#define SIZE        1000\n#define DELIMS      \" \\t\\n\"\n\nvoid piglatin(char *pig,const char *inp);\nvoid pigall(char **toklist);\n\n\/\/ parse_file -- parse all tokens in a file\n\/\/ RETURNS: token list\nchar **\nparse_file(FILE *xfsrc,size_t *tokc)\n{\n    char *bp;\n    char *cp;\n    char buf[SIZE];\n    size_t tokmax = 0;\n    size_t tokcount = 0;\n    char **toklist = NULL;\n\n    while (1) {\n        \/\/ get next line\n        cp = fgets(buf,sizeof(buf),xfsrc);\n        if (cp == NULL)\n            break;\n\n        bp = buf;\n        while (1) {\n            \/\/ get next token on line\n            cp = strtok(bp,DELIMS);\n            bp = NULL;\n            if (cp == NULL)\n                break;\n            printf(\"DEBUG: '%s'\\n\",cp);\n\n            \/\/ NOTE: using tokmax reduces the number of realloc calls\n            if (tokcount &gt;= tokmax) {\n                tokmax += 100;\n                toklist = realloc(toklist,sizeof(*toklist) * (tokmax + 1));\n            }\n\n            \/\/ NOTE: we _must_ use strdup to prevent the first and subsequent\n            \/\/ lines from being jumbled together in the _same_ buffer\n            toklist[tokcount++] = strdup(cp);\n\n            \/\/ add null token to end of list (just like argv)\n            toklist[tokcount] = NULL;\n        }\n    }\n\n    \/\/ trim list to amount actually used\n    if (toklist != NULL)\n        toklist = realloc(toklist,sizeof(*toklist) * (tokcount + 1));\n\n    \/\/ return number of tokens to caller\n    *tokc = tokcount;\n\n    return toklist;\n}\n\n\/\/ tokfree -- free the token list\nchar **\ntokfree(char **toklist)\n{\n\n    for (char **tok = toklist;  *tok != NULL;  ++tok)\n        free(*tok);\n\n    free(toklist);\n\n    toklist = NULL;\n\n    return toklist;\n}\n\nint\nmain(void)\n{\n\n    \/\/ some simple tests\n    char pig[SIZE];\n    piglatin(pig,\"pig\");\n    piglatin(pig,\"smile\");\n    piglatin(pig,\"omelet\");\n\n    \/\/ parse entire file\n    size_t tokcount;\n    char **toklist = parse_file(stdin,&amp;tokcount);\n\n    \/\/ translate all tokens into pig latin\n    pigall(toklist);\n\n    \/\/ free the list\n    toklist = tokfree(toklist);\n\n    return 0;\n}\n<\/code><\/pre>\n<hr>\n<p><strong>Spoiler Alert:<\/strong> Here&#8217;s the pig latin code I used to test the above with:<\/p>\n<pre><code>\/\/ piglatin.c -- convert words to pit latin\n\n#include &lt;stdio.h&gt;\n#include &lt;string.h&gt;\n#include &lt;ctype.h&gt;\n\nint\nisvowel(int chr)\n{\n\n    chr = (unsigned char) chr;\n    chr = tolower(chr);\n    return (strchr(\"aeiou\",chr) != NULL);\n}\n\nvoid\npiglatin(char *pig,const char *inp)\n{\n    const char *rhs;\n    char *lhs;\n    char pre[100];\n\n    *pig = 0;\n    rhs = inp;\n\n    do {\n        if (isvowel(*rhs)) {\n            strcat(pig,rhs);\n            strcat(pig,\"yay\");\n            break;\n        }\n\n        lhs = pre;\n        for (;  *rhs != 0;  ++rhs) {\n            if (isvowel(*rhs))\n                break;\n            *lhs++ = *rhs;\n        }\n        *lhs = 0;\n\n        strcat(pig,rhs);\n        strcat(pig,pre);\n        strcat(pig,\"ay\");\n    } while (0);\n\n    printf(\"%s --&gt; %s\\n\",inp,pig);\n}\n\nvoid\npigall(char **toklist)\n{\n    char pig[1000];\n\n    for (char **tokp = toklist;  *tokp != NULL;  ++tokp)\n        piglatin(pig,*tokp);\n}\n<\/code><\/pre>\n<\/p><\/div>\n<div class=\"mt24\"><\/div>\n<\/div>\n<p>            <span class=\"d-none\" itemprop=\"commentCount\">1<\/span> <\/p><\/div>\n<\/div>\n<p>[ad_2]<\/p>\n<p>solved Run-time error storing pointer character from strtok after multiple calls <\/p>\n","protected":false},"excerpt":{"rendered":"<p>[ad_1] Remember that strtok modifies the buffer. The caller to your functions would have to pass a temporary buffer that has been copied from the original before each call. In other words, the call to ModifiedStringSize trashes inputString so that when you call ManipulateString, the updated value for inputString is [effectively] garbage. The usual here &#8230; <a title=\"[Solved] Run-time error storing pointer character from strtok after multiple calls\" class=\"read-more\" href=\"https:\/\/jassweb.com\/solved\/solved-run-time-error-storing-pointer-character-from-strtok-after-multiple-calls\/\" aria-label=\"More on [Solved] Run-time error storing pointer character from strtok after multiple calls\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[320],"tags":[324],"class_list":["post-13444","post","type-post","status-publish","format-standard","hentry","category-solved","tag-c"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>[Solved] Run-time error storing pointer character from strtok after multiple calls - JassWeb<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/jassweb.com\/solved\/solved-run-time-error-storing-pointer-character-from-strtok-after-multiple-calls\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"[Solved] Run-time error storing pointer character from strtok after multiple calls - JassWeb\" \/>\n<meta property=\"og:description\" content=\"[ad_1] Remember that strtok modifies the buffer. The caller to your functions would have to pass a temporary buffer that has been copied from the original before each call. In other words, the call to ModifiedStringSize trashes inputString so that when you call ManipulateString, the updated value for inputString is [effectively] garbage. The usual here ... Read more\" \/>\n<meta property=\"og:url\" content=\"https:\/\/jassweb.com\/solved\/solved-run-time-error-storing-pointer-character-from-strtok-after-multiple-calls\/\" \/>\n<meta property=\"og:site_name\" content=\"JassWeb\" \/>\n<meta property=\"article:published_time\" content=\"2022-10-03T20:55:32+00:00\" \/>\n<meta name=\"author\" content=\"Kirat\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kirat\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-run-time-error-storing-pointer-character-from-strtok-after-multiple-calls\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-run-time-error-storing-pointer-character-from-strtok-after-multiple-calls\/\"},\"author\":{\"name\":\"Kirat\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31\"},\"headline\":\"[Solved] Run-time error storing pointer character from strtok after multiple calls\",\"datePublished\":\"2022-10-03T20:55:32+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-run-time-error-storing-pointer-character-from-strtok-after-multiple-calls\/\"},\"wordCount\":284,\"publisher\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\"},\"keywords\":[\"c++\"],\"articleSection\":[\"Solved\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-run-time-error-storing-pointer-character-from-strtok-after-multiple-calls\/\",\"url\":\"https:\/\/jassweb.com\/solved\/solved-run-time-error-storing-pointer-character-from-strtok-after-multiple-calls\/\",\"name\":\"[Solved] Run-time error storing pointer character from strtok after multiple calls - JassWeb\",\"isPartOf\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#website\"},\"datePublished\":\"2022-10-03T20:55:32+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-run-time-error-storing-pointer-character-from-strtok-after-multiple-calls\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/jassweb.com\/solved\/solved-run-time-error-storing-pointer-character-from-strtok-after-multiple-calls\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-run-time-error-storing-pointer-character-from-strtok-after-multiple-calls\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/jassweb.com\/solved\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"[Solved] Run-time error storing pointer character from strtok after multiple calls\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/jassweb.com\/solved\/#website\",\"url\":\"https:\/\/jassweb.com\/solved\/\",\"name\":\"JassWeb\",\"description\":\"Build High-quality Websites\",\"publisher\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/jassweb.com\/solved\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\",\"name\":\"Jass Web\",\"url\":\"https:\/\/jassweb.com\/solved\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png\",\"contentUrl\":\"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png\",\"width\":693,\"height\":132,\"caption\":\"Jass Web\"},\"image\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31\",\"name\":\"Kirat\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1776403586\",\"contentUrl\":\"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1776403586\",\"caption\":\"Kirat\"},\"sameAs\":[\"http:\/\/jassweb.com\"],\"url\":\"https:\/\/jassweb.com\/solved\/author\/jaspritsinghghumangmail-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"[Solved] Run-time error storing pointer character from strtok after multiple calls - JassWeb","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/jassweb.com\/solved\/solved-run-time-error-storing-pointer-character-from-strtok-after-multiple-calls\/","og_locale":"en_US","og_type":"article","og_title":"[Solved] Run-time error storing pointer character from strtok after multiple calls - JassWeb","og_description":"[ad_1] Remember that strtok modifies the buffer. The caller to your functions would have to pass a temporary buffer that has been copied from the original before each call. In other words, the call to ModifiedStringSize trashes inputString so that when you call ManipulateString, the updated value for inputString is [effectively] garbage. The usual here ... Read more","og_url":"https:\/\/jassweb.com\/solved\/solved-run-time-error-storing-pointer-character-from-strtok-after-multiple-calls\/","og_site_name":"JassWeb","article_published_time":"2022-10-03T20:55:32+00:00","author":"Kirat","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Kirat","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/jassweb.com\/solved\/solved-run-time-error-storing-pointer-character-from-strtok-after-multiple-calls\/#article","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/solved-run-time-error-storing-pointer-character-from-strtok-after-multiple-calls\/"},"author":{"name":"Kirat","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31"},"headline":"[Solved] Run-time error storing pointer character from strtok after multiple calls","datePublished":"2022-10-03T20:55:32+00:00","mainEntityOfPage":{"@id":"https:\/\/jassweb.com\/solved\/solved-run-time-error-storing-pointer-character-from-strtok-after-multiple-calls\/"},"wordCount":284,"publisher":{"@id":"https:\/\/jassweb.com\/solved\/#organization"},"keywords":["c++"],"articleSection":["Solved"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/jassweb.com\/solved\/solved-run-time-error-storing-pointer-character-from-strtok-after-multiple-calls\/","url":"https:\/\/jassweb.com\/solved\/solved-run-time-error-storing-pointer-character-from-strtok-after-multiple-calls\/","name":"[Solved] Run-time error storing pointer character from strtok after multiple calls - JassWeb","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/#website"},"datePublished":"2022-10-03T20:55:32+00:00","breadcrumb":{"@id":"https:\/\/jassweb.com\/solved\/solved-run-time-error-storing-pointer-character-from-strtok-after-multiple-calls\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/jassweb.com\/solved\/solved-run-time-error-storing-pointer-character-from-strtok-after-multiple-calls\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/jassweb.com\/solved\/solved-run-time-error-storing-pointer-character-from-strtok-after-multiple-calls\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/jassweb.com\/solved\/"},{"@type":"ListItem","position":2,"name":"[Solved] Run-time error storing pointer character from strtok after multiple calls"}]},{"@type":"WebSite","@id":"https:\/\/jassweb.com\/solved\/#website","url":"https:\/\/jassweb.com\/solved\/","name":"JassWeb","description":"Build High-quality Websites","publisher":{"@id":"https:\/\/jassweb.com\/solved\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/jassweb.com\/solved\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/jassweb.com\/solved\/#organization","name":"Jass Web","url":"https:\/\/jassweb.com\/solved\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/","url":"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png","contentUrl":"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png","width":693,"height":132,"caption":"Jass Web"},"image":{"@id":"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31","name":"Kirat","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/image\/","url":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1776403586","contentUrl":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1776403586","caption":"Kirat"},"sameAs":["http:\/\/jassweb.com"],"url":"https:\/\/jassweb.com\/solved\/author\/jaspritsinghghumangmail-com\/"}]}},"_links":{"self":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts\/13444","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/comments?post=13444"}],"version-history":[{"count":0,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts\/13444\/revisions"}],"wp:attachment":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/media?parent=13444"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/categories?post=13444"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/tags?post=13444"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}