null-terminated char array

今天做一道算法题,是traverse一个null-terminated char array。
所谓null-terminated char array就是以 ‘\0’ 结尾的char array。
这个算法实现起来并没有难度,代码如下:

#include <iostream>

using namespace std;

void reverse(char* str){
    int n = strlen(str);
    cout << n << endl;
    for(int i = 0;i < n/2;i++){
        char temp = str[i];
        str[i] = str[n-i-1];
        str[n-i-1] = temp;
    } 
}

void reverse1(char *str){
    char* end = str;
    char temp;
    if(str){
        while(*end){
            end++;
        }
        --end;
        while(str < end){
            temp = *str;
            *str++ = *end;
            *end-- = temp;
        }
    }
}

int main(){
    char a[10] = "abcdef\0";// char *a = "abc"; is not the expression of null-terminated
    //char *a = "abcdef";
    cout << a << endl;
    reverse1(a);
    cout << a << endl;
}

这里两种实现方式就不细说了,说说我犯的一个错误。在main中,我一开始声明数组的方式是char *a = "abcdef";。这样每当我用a[i] = num;的方式赋值的时候,编译器就会报错。貌似这样声明的数组,并非null-terminated char array,系统不会用index的方式去赋值。所以当我把声明方式改成了char a[10] = "abcdef\0";编译器就不会报错了。
不一定非要在声明的时候加一个'\0',只要在声明的时候,比所赋值的长度大至少一个就可以了。比如char a[4] = 'abc';或者
char a[5] = 'abc';

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值