首页 > 解决方案 > 如何取消引用字符串指针

问题描述

我在从代码中获取所需行为时遇到问题。我是 C 语言的新手(虽然我通常用 C++ 编程,所以我有点熟悉),我不确定我的问题该去哪里。在下面的代码中,当尝试使用传递给函数的“输入”字符串的内容填充 2 个字符串时,结果是内存位置被传递给了 2 个字符串,这意味着当我对单个字符串执行修改时,原始数据已编辑...我希望将初始数据复制到分配给新字符串的新内存位置。

bool interpretInput(char *input)
{
    char *name = malloc(MAX_NAME_SIZE / 2);
    char *surname = malloc(MAX_NAME_SIZE / 2);

    if (name == NULL | surname == NULL)
    {
        return 1;
    }

    int length = (int) strlen(input);
    if ((length > 0) && (input[length - 1] == '\n')) input[length - 1] = '\0';

    if (surname = strpbrk(input, " "))
    {
        int sLength = (int) strlen(surname);

        for (int i = 0; i < sLength; i++)
        {
            surname[i] = surname[i + 1];
        }

        length = (int) strlen(input);

        for (int i = 0; i <= length - sLength; i++)
        {
            name[i] = input[i];
        }

        length = (int) strlen(name);
        sLength = (int) strlen(surname);

        printf("Name: %s length: %d \n", name, length);
        printf("Surname: %s length: %d \n", surname, sLength);
    }
    else
    {
        printf("Name length: %d", length);
    }

    return 0;
}

编辑:实际上,我想用另一个数组的每个增量处的值填充一个数组,而不使用 strcpy。

标签: carraysstring

解决方案


我想你想要strcpy(char* dest, char* src)。取消引用 char* 只会为您生成字符串中的第一个字符。

#include <stdio.h>

int main()
{
    char* test = "hello world";
    char* test2 = malloc(11*sizeof(char));
    strcpy(test2, test);

    printf("%s\n", test);
    printf("%s\n", test2);
    test2[5] = '_';
    printf("%s\n", test);
    printf("%s\n", test2);
    printf("%c\n", *test);

    free(test2);
}

吐出来

hello world                                                                                                                                                                        
hello world                                                                                                                                                                        
hello world                                                                                                                                                                        
hello_world                                                                                                                                                                        
h

推荐阅读