关于argv和strncpy()的困惑

遇到一个问题,命令行参数复制到字符串后打印出来的结果与直接打印命令行参数的结果不一致。

不清楚是哪里的问题。

#include <stdio.h>
#include <string.h>
#define LEN 5
int main(int argc, char* argv[])
{
    char s1[LEN];
    char s2[LEN];

    for(int i = 0; i<LEN; i++)
    {
        s1[i] = ‘\0‘;
        s2[i] = ‘\0‘;
    }

    printf("%s\n%s\n", s1, s2);

    // 直接打印命令行参数
    for(int i = 1; i < argc; i++)
        printf("%s\n", argv[i]);

    // 将命令行参数复制到字符串再打印
    strncpy(s1, argv[1], LEN);
    strncpy(s2, argv[2], LEN);
    printf("%s\n%s\n", s1, s2);

    return 0;
}

运行:

test.exe tmp temp

结果是对的:

tmp
temp
tmp
temp

但是,运行:

test.exe tmp tempmoreword

结果:

tmp
tempmoreword
tmp
tempmtmp

即,命令行参数超出strncpy()指定的字符串长度时会出错。

关于argv和strncpy()的困惑,布布扣,bubuko.com

时间: 2025-01-20 05:52:41

关于argv和strncpy()的困惑的相关文章

ioctl使用

#include <stdio.h> #include <string.h> #include <stdlib.h> #include <errno.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include 

端口转发工具源码分析

/************************************************************************************* * * HTran.cpp - HUC Packet Transmit Tool. * * Copyright (C) 2000-2004 HUC All Rights Reserved. * * Author : lion * : lion#cnhonker.net * : http://www.cnhonker.com

mysql c sample 程序

gcc -g mysqlquery.c -lmysqlclient -I/usr/include/mysql -L/usr/lib64/mysql #include <stdlib.h> #include <stdio.h> #include <string.h> #include <mysql.h> #include <sys/time.h> int main (int argc, char *argv[]) { if (argc < 2

python中sys.argv的说明(读《python简明教程》的困惑解答)

在阅读<python简明教程>的时候,第8章.14章有对sys模块的使用,其中关于sys.argv的说明有一点困惑,让自己思索了好久,后来才恍然大悟,在这里分享一下我所理解到的,以便于和我有一样困惑的python学习者能够更好的理解. 以下代码来自于<python简明教程>8.1: 例8.1 使用sys模块 #!/usr/bin/python # Filename: using_sys.py import sys print 'The command line arguments

C and C++ 的困惑

很久以前的东西,记录到上面来吧,希望对其他童鞋有帮助 Book : "Expert C Programming:Deep C Secrets" Author : Perter Van Der LinDen Book : "C Programming FAQs: Frequently Asked Questions" Author : Steve Summit Book : "C++: The Complete Reference, Fourth Editi

码海拾遗:strcpy()、strncpy()和strcpy_s()区别

1.strcpy() 原型:char *strcpy(char *dst,const char *src) 功能:将以src为首地址的字符串复制到以dst为首地址的字符串,包括'\0'结束符,返回dst地址.要求:src和dst所指内存区域不可以重叠且dst必须有足够的空间来容纳src的字符串,若dst空间不足,编译时并不会报错,但执行时因系统不同会出现不同的结果:Mac系统提示"Abort trap:6"(Mac):CentOS7系统会正常运行(可能是个例,可以正常运行) 测试代码:

一文搞懂*argv和**kwargs

大多刚接触Python的学员,会对*argv和**kwargs这两个魔法变量的用法产生困惑,今天本文将全面梳理下这两个小可爱的使用方法,让各位同学彻底搞懂它们的规则. 这两个变量主要用户函数定义,有了它俩你可以将不定数量的参数传递给一个函数.这里,需要申明下:在写Python代码时,我们习惯将它俩写成*argv和**kwargs,这只是一个书写习惯,你也可以任性地用*var和**kvars来代替它们,要注意的是符号*和**是必须写的. 函数在实际执行时,编程人员无法预先知道会被传入多少实参,这是

c strncpy strncat函数 demo

#include <stdio.h> #include <string.h> int main(int argc, char **argv) { char city[50] = "chengdu"; char name[30] = "guanxianseng"; char cityAndName[90]; strncpy(cityAndName, city, 50); strncat(cityAndName, "_", 1

bzoj2186【SDOI2008】沙拉公主的困惑

2186: [Sdoi2008]沙拉公主的困惑 Time Limit: 10 Sec  Memory Limit: 259 MB Submit: 2363  Solved: 779 [Submit][Status][Discuss] Description 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞票.房地产第一大户沙拉公主决定预测一下大富翁国现在所有真钞票的数量.现在,请你帮助沙拉公主解决这个问题,由于可能张