我是一个非常缺乏经验的c语言学习者,我在这段代码中得到了一个警告,这应该是在调用命令时(在linux ubuntu中编程)反转作为命令第一个参数传递的字符串。
警告是:14:9:警告:赋值使指针中的整数不带强制转换

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

    int main(int argc, char *argv[]) {

        char str[80];
        int p = 0;
        int i;

        for(i = strlen(argv[1]) - 1; i >= 0; i--){
            str[p] = argv [1][i];
            p++;
        }

        str[p] = "\0";
        printf("%s\n", str);

    }

当我使用命令./command stringhere时,假设代码(它使用一些不需要的字符)打印第一个参数的反转字符串。
因此作为一个例子,当我使用./invert_字符串时,控制台会打印gnirts和一堆问号和其他字符。这是有原因的吗?代码是否在内存中打印了不应该打印的值?

最佳答案

立即解决您看到的问题的方法是将NUL终止语句更改为:

str[p] = '\0';

此更改是必需的,因为您要分配一个字符('\0'),而不是一个字符*(“\0”)。
但是,由于源字符串是以nul结尾的,因此可以将终止符与整个字符串一起复制。
此外,请注意,如果源字符串超过80个字符,则会出现缓冲区溢出。

关于c - C语言中的字符串反向程序中的警告,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22364268/

10-10 20:44
查看更多