c - 修改字符指针字符串数组(char * string[])

标签 c arrays pointers char literals

我一直在给一个...有趣的...任务。我被要求使用指针修改字符数组。

我知道:

*char =“某事”;//是一个文字,不能修改。

char[] = "某事";//可以修改

但是呢:

main.c
------

static char* stringlist01[] = 
{
    "thiy iy a ytring",
    "this is also a string, unlike the first string",
    "another one, not a great one, and not really like the last two.",
    "a third string!",
    NULL,
};

int main()
{
    int ret = 9999;

    printf("////TEST ONE////\n\n");

    ret = changeLetterInString(stringlist01[0]);
    printf("Return is: %d\n\n", ret);

    printf("Stringlist01[0] is now: %s\n", stringlist01[0]);
}

并且

changeLetterInString.c
----------------------

int changeLetterInString(char *sentence)
{    
    if (sentence != NULL)
    {
        // TODO
        // Need to change "thiy iy a ytring"
        // into "this is a string"
        // and save into same location so
        // main.c can see it.
    }

    success = 0;    // 0 is Good
    return success;
}

到目前为止,我已经尝试过:

    for (char* p = sentence; *p; ++p)
    {
        if (*p == 'y')
        {
            *p = 's';
        }
    }

我已经尝试过:

sentence[0] = 't'
sentence[1] = 'h'
sentence[2] = 'i'
sentence[3] = 's'   // and so on...

但两者都不起作用。

任何帮助和/或见解将不胜感激。

最佳答案

两种表示法之间存在细微差别:

char string[] = "Hello World";
// vs
char* string = "Hello World";

它们看起来很相似,对吧?然而它们是不同的。第一个是字符数组,第二个是指向字符数组的指针。

默认情况下,任何字符串都始终const。没有办法解决它。尝试修改字符串文字通常会导致段错误

您的代码包含一个指向字符数组的指针数组。由于您包含对常量字符串文字的指针引用,因此您无法修改它们。为了修改它们,您需要将它们转换为数组,就像第一个示例中的操作方式一样。这会将字符串文字转换为可以修改的字符数组,而不是指向无法修改的内存的指针。

char strs[][] = {
    "Hello",
    "World"
}; // transforms the string literals into character arrays

strs[0][0] = 'X'; // valid

然而这不会编译,并导致未定义的行为

char* strs[] = {
    "Hello",
    "World",
};

strs[0][0] = 'X'; // trying to modify a pointer to a constant string literal, undefined

关于c - 修改字符指针字符串数组(char * string[]),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58917975/

相关文章:

javascript - JS 如何将序列化对象转换为数组?

c - 从 btree 中删除 - 未分配被释放的指针

c++ - ncurses、menu.h 和 current_item() 的问题

javascript - 按即将到来的日期对日期为字符串的数组进行排序

c - 这个 << 语句是什么意思?

c++ - 生成随机二维数组

具有数组和指针的 C++ 矩阵

c++ - 移动数组指针不会改变起始地址

c - 在 C 中,整数和 float 的算术运算符是否相同?

java - 如何获取java 1.4中使用的原生C语言库的源码?