在char数组中重新分配字符

时间:2012-09-29 17:15:08

标签: c arrays string char

我试图通过以下任意条件提前终止字符串:

void end_string_early(char string[], int len) {
    int i;
    char j;

    for (i=0;i<len;i++) {
        j = string[i];                                   
        if (arbitrary_condition(j)) {
            string[i] = "a";
        }
    }
} 

我收到编译错误:

  

警告:赋值在没有强制转换的情况下从指针生成整数

令我困惑的是,如果我使用int数组做同样的事情(将值更改为另一个int而不是a)那么它的工作原理完美。也许这与论证如何通过有关? (虽然我的印象是所有阵列都通过ref传递)我不完全确定,这是我第一次去C(通过K&amp; R书)。

6 个答案:

答案 0 :(得分:3)

'a'"a"是两个不同的东西:第一个是字符a ,第二个是仅包含字符 a 。

您正在尝试为字符分配文字字符串。 "a"是一个文字字符串,即char *char[]的元素是char:一个整数类型,因此有关尝试指定指针的消息整数。该消息有点令人困惑,因为char是一个整数类型。

所以使用:

string[i] = 'a';

但是这不会终止字符串。为此你需要:

string[i] = '\0';

答案 1 :(得分:1)

string[i] = "a";

必须是

string[i] = 'a';

请注意不同的引号。


string是来自char的数组,而"a" 不是 a char,它是字符串文字,包含两个{{1} }} - 一个用于char和一个a 因此,要将\0元素设置为char数组,您需要使用单引号char

答案 2 :(得分:1)

"a"char[2],它会衰减到char*,这就是你收到警告的原因; stringchar*,因此string[i]char,这意味着您正在尝试将char*分配给char,这是错误的。

您需要使用单引号:

string[i] = 'a';

双引号会生成char数组,单引号只会生成一个char,因此'a'char并为char分配char {{1}}可以使用。

答案 3 :(得分:1)

使用string[i] = 'a';(而不是"a"),您的计划将更有效。

以防万一,请注意it's not possible to re-assign the chars of a literal string。你展示的那段代码没有这个问题,但如果你打电话给end_string_early("foo"...),它就会。

答案 4 :(得分:1)

"a"不是字符 - 它是char*(字符串)。您需要'a'

答案 5 :(得分:1)

string[i] = "a"应为string[i] = 'a'"a"'a'不同,其中“a”是文字字符串,它“返回指针,{{1}只是一个角色。