c - 寻找有效的交换字符指针

标签 c pointers embedded swap

我的问题是关于交换字符指针算法的效率。

为什么任何一条注释行都会导致我的编译器抛出错误?

相同的逻辑适用于将 b 与 temp 交换,但是相同的逻辑在对 temp 和 a 重复相同的函数时会导致错误?

谢谢大家

#include <iostream>
void sawp ( char *a, char *b, int l)
{
    char * prtA = a;
    char * prtB = b;
    char *temp = (char *)calloc(l, sizeof(char));

    while(*(char*)b)
    {        
        *(char*)temp= *(char*)b;
        // *(char*)b  = *(char*)a;
        // *(char*)a = *(char*)temp;

        std::cout<<*(char*)temp<<std::endl;
        b++;
        temp++;
        a++;    
    }

}

int main()

{
    char *a="Name";
    char *b="Lastname";
    sawp (a,b,sizeof(b));
    return 0;

}

最佳答案

修改字符串文字会导致未定义的行为。 它可能会导致崩溃。 字符串文字是只读的,因此无法修改。

所以

*b = *a;

是一个错误。

如果你想修改你的字符串,那么他们应该有读写权限。 所以

char a[10] = "name1";
char b[10] = "name2";

然后你就可以拥有

*b = *a; /* In your sawp() function */

关于c - 寻找有效的交换字符指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27407913/

相关文章:

c - 向nor flash发送命令

c - 从字符指针打印字符

c - 这个 x86 内联汇编在做什么?

c++ - 指向对象的引用

c - 堆栈指针指向保留的内存

c - 使用 Eclipse CDT 调试静态库

c - 使用指针在函数内部定义数组

c - C 中的内存池实现

c++ - 通过指针调用模板类成员函数【为什么这个有效的c++】?

c - 为什么我不能将函数指针强制转换为 (void *)?