# Inputting String in C programming language

````
In C programming language, the strings doesn't have a special data type on it's own. So it's usually represented with characters itself.
Usually an array of characters is used to represent characters like this:

``
int char[1000];
``

Characters can be read by variety of methods like:

1. scanf("%s", char);

It can read a single string, but reading strings with spaces is not supported by scanf operators

2. Then there is getline() function which is defined in C programming lanaguage book. It's actually part of
the build in library.

```
#include <stdio.h>
#include <string.h>

int main()
{
  int bytes_read;
  int nbytes = 100;
  char *my_string;

  puts ("Please enter a line of text.");

  /* These 2 lines are the heart of the program. */
  my_string = (char *) malloc (nbytes + 1);
  bytes_read = getline (&my_string, &nbytes, stdin);

  if (bytes_read == -1)
    {
      puts ("ERROR!");
    }
  else
    {
      puts ("You typed:");
      puts (my_string);
      printf("%d", strlen(my_string));
    }

  return 0;
}

```

3. There is gets() functions which is generally considered as unsafe
4. fgets() is more safe as it provides a bounded input

```
fgets(string, 1000, stdin);
```

For more details check [this stackoverflow answer](https://stackoverflow.com/questions/2008173/writing-secure-c-and-secure-c-idioms)

As a bonus, I am sharing how to `find Pangram of a given string in C`

{% highlight linenos %}
#include<stdio.h>
#include<string.h>
#define MAX_LIMIT 1000

int main() {
    char string[MAX_LIMIT];
    int character_hash[26]={0};
    int pancount = 0;
    
    fgets(string, 1000, stdin);


    for(int i=0; i<strlen(string); i++) {
        if('a'<=string[i] && string[i]<='z')  {
            character_hash[string[i]-'a'] += 1;
        }
        else if('A'<=string[i] && string[i]<='Z') {
            character_hash[string[i]-'A'] += 1;
        }
    }
    
    for(int i=0;i<26;i++){
        if(character_hash[i]==0) {
            pancount=1;   
        }
    }

    if(pancount==0) {
        printf("Pangram");
    }
    else if(pancount==1) {
        printf("Not Pangram\n");
        for(int i=0;i<26;i++) {
            if(character_hash[i]==0) {
            printf("%c ", i+'a'); }
        }
    }
    
}

{% endhighlight %}
````


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://til.kurianbenoy.com/c-programming-language/inputting-string-in-c-programming-language.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
