Reputation: 35
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
int i, *x , size ;
char name[100] , *y;
printf("Give name: ");
/* user gives name */
gets(name);
size = strlen(name);
/* gets memory for exactly the name length */
y=(char*)malloc(size*sizeof(char));
for(i=0;i!='\0';i++) {
/* corywrites the name */
*(y+i)=name[i];
}
printf("%s" ,*y);
}
Upvotes: 0
Views: 91
Reputation: 1121
You didn't tell us what problems/symptoms you're seeing...but for starters...
name[i] != '\0'
instead of i != '\0'
strlen(name)
returns does not include the trailing null
.y
after the for
loop:So...
y=(char*)malloc((size + 1) * sizeof(char));
for(i=0; name[i] != '\0'; i++) {
/* copywrites the name */
y[i] = name[i]; /* changed to array syntax */
}
y[size] = '\0';
printf("%s", y);
Upvotes: 1
Reputation: 81926
You didn't allocate enough memory for y
. You need to allocate space for the number of characters in the string plus one more for the null terminating character.
y = malloc(size + 1);
Your loop condition is broken. You probably are looking to compare the ith value in the string:
for (i=0; name[i]!='\0'; i++) {
Instead of writing *(y+i)
, you should just write y[i]
. It's more understandable and it has exactly the same semantics.
for (i=0; name[i]!='\0'; i++) {
y[i] = name[i];
}
You didn't null terminate y
.
y[size] = '\0';
When printing a string, the argument is expected to be of type char *
, not char
. So:
printf("%s", y);
Upvotes: 0
Reputation: 2995
If I would copy a string by hand it would look like:
int i;
for( i = 0; source[i]; i++ ) dest[i] = source[i]; // copy characters
dest[i] = 0; // append null terminator
When you allocate the string you need to add 1 for the null terminator, and after you copy the string, you also need to add the null terminator.
You have a problem where you are comparing i
to '\0'
which is the initial condition and it terminates immediately.
An easier way to copy a string is to use the strcpy function.
Upvotes: 0