Home > front end >  passing string to a pointer in c
passing string to a pointer in c

Time:03-05

I am fairly new in C. I want to assign string in a function to a pointer but I have no idea why it is not working?

This is the initial code:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <stdint.h>
#include <stdbool.h>
#include <string.h>

void test(char* result) {
    *result = "HELLO";
}

int main() {
    char result[64];
    test(result);
    printf("%s", *result);

}

This is the error: warning: assignment makes integer from pointer without a cast. Since * result should store value and result is the address, shouldn't this work out?

CodePudding user response:

Hello and welcome to C.

Your statement:

*result = "HELLO";

is the same as attempting to do the following:

result[0] = "HELLO"

which is attempting to set a single character to a string, and you can't do that.

you will need to copy the string character by character

luckily there is a function for that which you have included already with <string.h> called strcpy

strcpy(result,"HELLO")

This will work as long as your string to copy is fewer than 63 characters as you have defined in your main() function.

char result[64];

you should probably also send the length of the string to the test function and use strncpy

strncpy(result,"HELLO",length); // safe copy

and then terminate the string with '\0'

result[length-1] = 0;

your printf doesn't need to dereference the string pointer. So simply printf("%s",result); is fine.

so in summary:

void test(char* result,uint32_t len) {
    strncpy(result,"HELLO",len); // safe copy (however "HELLO" will work for 64 length string fine)
    result[len-1] = 0; // terminate the string
}

#define MY_STRING_LENGTH 64

int main() {
    char result[MY_STRING_LENGTH ];
    test(result,MY_STRING_LENGTH);
    printf("%s",result); // remove *

}

CodePudding user response:

You declared an array in main

char result[64];

Passed to the function it is converted to rvalue of the type char * that points to the first element of the array. The function deals with a copy of this pointer. Changing this copy of the pointer fors not influence on the original array.

Within the function the expression *result has the type char. So this assignment

*result = "HELLO";

does not make a sense.

In this call

printf("%s", *result);

there is again used an incorrect expression of the type char *result.

What you need is to use standard string function strcpy.

For example

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

void test(char* result) {
    strcpy( result, "HELLO" );
}

int main( void ) {
    char result[64];
    test(result);
    puts( result );

}

CodePudding user response:

Remove the '*' of the variable "result" after you've declared it and use the function "strcpy()" in your code.

CodePudding user response:

Problem:

When you store a character in a char varible,it puts the ASCII of the character in the memory.

char c='a';is the same aschar c=97;

You can verify this by using the code:

char c='a';
printf("%d",c);

So here is one way:

void test(char* result) {
    *result   = 'H';
    *result   = 'E';
    *result   = 'L';
    *result   = 'L';
    *result = 'O';
}

int main() {
    char result[64];
    test(result);
    printf("%s", result);
}

but it is redundant because there is a function called strcpy in <string.h>

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

void test(char* result) {
    strcpy( resul, "HELLO" );
}

int main() {
    char result[64];
    test(result);
    puts( result );

}
  • Related