Reputation: 107
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main() {
const char* hello = "Hello, World!";
char *str = malloc(14 * sizeof(char));
for (int i = 0; i < 14; i++) {
strcpy(str[i],hello[i]);
}
str[14]='\0';
printf("%s\n", str);
return 0;
}
Compilation warnings:
warning: passing argument 1 of 'strcpy' makes pointer from integer without a cast [-Wint-conversion] note: expected 'char *' but argument is of type 'char' warning: passing argument 2 of 'strcpy' makes pointer from integer without a cast [-Wint-conversion]
str is a pointer and hello too, what's going on?
Upvotes: 5
Views: 1916
Reputation: 2968
The issue here is your attempting to use C-strings as arrays of characters, which is certainly allowed but it's a different behavior than using them as pointers to null-terminated strings. Doing hello[0]
evaluates to the first character of the string, which is simply a usually 8-bit integer. A char
is a value, it does not correspond to a memory address.
The correct statement you want is
strcpy(str, hello);
For reference, if you want to get a string starting at some point in your string, you would do
strcpy(str, hello + 1);
Performing addition on a pointer evaluates to a pointer that is some n addresses forward in memory.
Upvotes: 2
Reputation: 3950
The definition of strcpy
takes two char
pointers not the str[]
, hello[]
arrays.
char *strcpy(char *destination, const char *source)
Upvotes: 0
Reputation: 1631
You are doing it wrong:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main() {
const char* hello = "Hello, World!";
char *str = malloc(strlen(hello)+1);
strcpy(str,hello);
printf("%s\n", str);
free(str);
return 0;
}
Explanation:
strcpy
operates on pointers, where both are start location to write to and read from, so you have to pass those, not characters. Your read location is hello
, your write location is str
. Then strcpy
loops until it finds a 0
character (which is included) to stop copying, so your loop is unnecessary. Last thing is that you have to free allocated memory. Also sizeof(char)
doesn't make sense: it's always 1.
Upvotes: 6