#define BUFFER_SIZE 42 #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <string.h> size_t ft_strlen(const char *str) { int index; index = 0; while (str[index] != '\0') { index++; } return (index); } char *ft_strchr(const char *s, int c) { while (*s != '\0') { if (*s == c) return ((char *)s); s++; } if (*s == c) return ((char *)s); return (0); } char *ft_strdup(const char *s) { int i; char *mem; i = 0; mem = (char *)malloc(sizeof(char) * (ft_strlen(s) + 1)); if (mem == NULL) return (NULL); while (*s != '\0') { mem[i] = *s; i++; s++; } mem[i] = '\0'; return (mem); } size_t ft_strlcpy(char *dst, const char *src, size_t size) { size_t n; char *d; const char *s; d = dst; s = src; n = 0; while (*s != '\0') { if (n + 1 < size) { *d = *s; d++; } s++; n++; } if (size) *d = '\0'; return (n); } char *ft_strjoin(char const *s1, char const *s2) { char *mem; int i; int len; i = 0; len = ft_strlen(s1) + ft_strlen(s2); mem = (char *)malloc(sizeof(*mem) * (len + 1)); if ((s1 == NULL || s2 == NULL) || mem == NULL) return (NULL); while (*s1 != '\0') { mem[i] = *s1++; i++; } while (*s2 != '\0') { mem[i] = *s2++; i++; } mem[i] = '\0'; return (mem); } char *ft_substr(char const *s, unsigned int start, size_t len) { char *mem; size_t size; size = ft_strlen(s); if (start >= size) return (ft_strdup("")); if (len < size) mem = (char *)malloc(sizeof(*mem) * len + 1); else mem = (char *)malloc(sizeof(*mem) * size - start + 1); ft_strlcpy(mem, s + start, len + 1); return (mem); } static char *get_line(char *line) { size_t start; char *next_line; start = 0; while (line[start] != '\n' && line[start]) start++; next_line = ft_substr(line, start + 1, ft_strlen(line) - start); if (!*next_line) { free(next_line); return (NULL); } line[start + 1] = '\0'; return (next_line); } static char *read_line(int fd, char *next_line, char *buffer) { int byte; char *temp; byte = 1; while (byte != 0) { byte = read(fd, buffer, BUFFER_SIZE); if (byte < 0) return (NULL); else if (byte == 0) return (next_line); buffer[byte] = '\0'; if (!next_line) next_line = ft_strdup(""); temp = next_line; next_line = ft_strjoin(temp, buffer); free(temp); if (ft_strchr(buffer, '\n')) return (next_line); } return (next_line); } char *get_next_line(int fd) { char *line; char *buffer; static char *next_line; if (fd < 0 || BUFFER_SIZE <= 0) return (0); buffer = (char *)malloc(sizeof(*buffer) * BUFFER_SIZE + 1); if (!buffer) return (0); line = read_line(fd, next_line, buffer); free(buffer); if (!line) return (NULL); next_line = get_line(line); return (line); } int main(void) { int fd; fd = open("42file", O_RDONLY | O_CREAT, S_IRUSR, S_IWUSR); if (fd == -1) { printf("File Error\n"); return (1); } printf("%s\n", get_next_line(fd)); if (close(fd) == -1) { printf("File Close Error\n"); return (1); } return (0); }
Write, Run & Share C Language code online using OneCompiler's C online compiler for free. It's one of the robust, feature-rich online compilers for C language, running the latest C version which is C18. Getting started with the OneCompiler's C editor is really simple and pretty fast. The editor shows sample boilerplate code when you choose language as 'C' and start coding!
OneCompiler's C online editor supports stdin and users can give inputs to programs using the STDIN textbox under the I/O tab. Following is a sample C program which takes name as input and print your name with hello.
#include <stdio.h>
int main()
{
char name[50];
printf("Enter name:");
scanf("%s", name);
printf("Hello %s \n" , name );
return 0;
}
C language is one of the most popular general-purpose programming language developed by Dennis Ritchie at Bell laboratories for UNIX operating system. The initial release of C Language was in the year 1972. Most of the desktop operating systems are written in C Language.
When ever you want to perform a set of operations based on a condition if-else
is used.
if(conditional-expression) {
// code
} else {
// code
}
You can also use if-else for nested Ifs and if-else-if ladder when multiple conditions are to be performed on a single variable.
Switch is an alternative to if-else-if ladder.
switch(conditional-expression) {
case value1:
// code
break; // optional
case value2:
// code
break; // optional
...
default:
// code to be executed when all the above cases are not matched;
}
For loop is used to iterate a set of statements based on a condition.
for(Initialization; Condition; Increment/decrement){
// code
}
While is also used to iterate a set of statements based on a condition. Usually while is preferred when number of iterations are not known in advance.
while(condition) {
// code
}
Do-while is also used to iterate a set of statements based on a condition. It is mostly used when you need to execute the statements atleast once.
do {
// code
} while (condition);
Array is a collection of similar data which is stored in continuous memory addresses. Array values can be fetched using index. Index starts from 0 to size-1.
data-type array-name[size];
data-type array-name[size][size];
Function is a sub-routine which contains set of statements. Usually functions are written when multiple calls are required to same set of statements which increases re-usuability and modularity.
Two types of functions are present in C
Library functions are the in-built functions which are declared in header files like printf(),scanf(),puts(),gets() etc.,
User defined functions are the ones which are written by the programmer based on the requirement.
return_type function_name(parameters);
function_name (parameters)
return_type function_name(parameters) {
//code
}