char x[]---char*---string---sizeof

字符串数组

#include <iostream>

int main(){
    char c_str[]="abcd";
    char c_str1[]={'a','b','c','d'};
    std::cout<<sizeof(c_str)<<std::endl;
    std::cout<<sizeof(c_str1)<<std::endl;

    return 0;
}

char*存储的字符串个数

char*字符串所占字节大小

char*是否有'\0'作为字符串结束符

string存储的字符个数

string存储的字符串所占的字节数

string的字符串是否有'\0'作为字符串结束符

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
pmap命令用于查看进程的内存映射情况。它的-x选项可以显示内存映射的详细信息,包括保护标志、偏移地址、设备号和inode号等。而-X选项则可以显示共享库的详细信息。 要实现pmap [-x -X]功能,可以使用以下步骤: 1. 解析命令行参数,判断是否有-x或-X选项。 2. 获取当前进程的pid。 3. 打开/proc/[pid]/maps文件,读取其中的内容。 4. 对于每一行内容,解析出起始地址、结束地址、保护标志、偏移地址、设备号和inode号等信息。 5. 如果有-x选项,则显示所有信息;如果有-X选项,则根据inode号查找共享库文件的详细信息,并显示出来。 以下是一个简单的示例代码: ``` #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <fcntl.h> #define MAXLINE 1024 struct mem_info { unsigned long start_addr; unsigned long end_addr; char perm[5]; unsigned long offset; unsigned int dev_major; unsigned int dev_minor; unsigned int inode; char name[MAXLINE]; }; void print_mem_info(struct mem_info *info, int show_all, int show_shared_libs) { if (show_all) { printf("%08lx-%08lx %s %08lx %02x:%02x %u %s\n", info->start_addr, info->end_addr, info->perm, info->offset, info->dev_major, info->dev_minor, info->inode, info->name); } else if (show_shared_libs && info->name[0] == '/') { printf("%08lx-%08lx %s %08lx %02x:%02x %u %s\n", info->start_addr, info->end_addr, info->perm, info->offset, info->dev_major, info->dev_minor, info->inode, info->name); } } int main(int argc, char *argv[]) { int fd; char line[MAXLINE]; char *p; int show_all = 0; int show_shared_libs = 0; pid_t pid = getpid(); // Parse command-line options while ((argc > 1) && (argv[1][0] == '-')) { if (strcmp(argv[1], "-x") == 0) { show_all = 1; } else if (strcmp(argv[1], "-X") == 0) { show_shared_libs = 1; } else { printf("Usage: %s [-x|-X]\n", argv[0]); exit(1); } argc--; argv++; } // Open /proc/[pid]/maps file snprintf(line, sizeof(line), "/proc/%d/maps", pid); if ((fd = open(line, O_RDONLY)) < 0) { printf("Can't open %s\n", line); exit(1); } // Read and print memory maps while (fgets(line, sizeof(line), fd) != NULL) { struct mem_info info; memset(&info, 0, sizeof(info)); // Parse memory map line p = strtok(line, " \t\n-"); sscanf(p, "%lx", &info.start_addr); p = strtok(NULL, " \t\n"); sscanf(p, "%lx", &info.end_addr); p = strtok(NULL, " \t\n"); strncpy(info.perm, p, sizeof(info.perm)); p = strtok(NULL, " \t\n"); sscanf(p, "%lx", &info.offset); p = strtok(NULL, " \t\n:"); sscanf(p, "%x", &info.dev_major); p = strtok(NULL, " \t\n"); sscanf(p, "%x", &info.dev_minor); p = strtok(NULL, " \t\n"); sscanf(p, "%u", &info.inode); p = strtok(NULL, " \t\n"); strncpy(info.name, p, sizeof(info.name)); // Print memory map information print_mem_info(&info, show_all, show_shared_libs); } // Close /proc/[pid]/maps file close(fd); return 0; } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值