【问题标题】:casting error arising upon appending a string to another one将字符串附加到另一个字符串时出现的转换错误
【发布时间】:2021-09-30 11:52:14
【问题描述】:

我正在尝试按照此处的建议将某个字符串(字符数组)附加到另一个字符串: https://stackoverflow.com/questions/10279718/append-char-to-string-in-c#:~:text=To%20append%20a%20char%20to%20a%20string%20in,because%20the%20given%20literal%20string%20cannot%20be%20modified

我的代码如下:

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

int main(){

char *mystring="Life";
int length_string=strlen(mystring);

char *string_continuation=" is life";
int length_continuation=strlen(string_continuation);

char *new_word=malloc(length_string+length_continuation+1);
strcpy(new_word,mystring);

for (int i=0; i<length_string; i++){
    
    
new_word[length_string+i]=string_continuation[i];

}
new_word[length_continuation+length_string]="\0";

printf("The final word is %s", new_word);
free (new_word);

return 0;
}

但是,我遇到了典型的错误:

assignment makes integer from pointer without a cast [-Wint-conversion]

指的是行:

 new_word[length_continuation+length_string]="\0"; 

有谁知道为什么会出现这样的错误?非常感谢

【问题讨论】:

    标签: c char c-strings string-literals


    【解决方案1】:

    在这个赋值语句中

    new_word[length_continuation+length_string]="\0";
    

    赋值的右操作数是字符串文字"\0",其类型为char[2],并在表达式中隐式转换为char *类型。

    另一方面,左操作数的类型为char。所以编译器会报错。

    你需要写

    new_word[length_continuation+length_string]='\0';
    

    使用整数字符常量'\0'

    注意 for 循环中有一个错字。而不是

    for (int i=0; i<length_string; i++){
    

    应该有

    for (int i=0; i<length_continuation; i++){
    

    你也可以使用标准 C 函数 strcat 来代替 for 循环,例如

    strcat( new_word, string_continuation );
    

    【讨论】:

    • @4386427 谢谢。我忘了哪里是左边,哪里是右边。:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多