vs命令行传参,为什么只输出第一个字符

shaode01 2013-08-26 01:48:08
if (argc>1) {
for (i=1; i < argc; i++)
printf("%s ",argv[i]);

}
getchar();

...全文
274 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
shaode01 2013-08-26
  • 打赏
  • 举报
回复
你们真是神一样的存在,xiaohuh421的解释非常感谢
赵4老师 2013-08-26
  • 打赏
  • 举报
回复
8楼代码少了一个),补上:
if (argc>1) {
 for (int i=0; i < argc; i++)
 _tprintf(_T("argv[%d]==[%s]\n"),i,argv[i]);
}
xiaohuh421 2013-08-26
  • 打赏
  • 举报
回复
你这个程序问题就是UNICODE与多字符集的问题, 你的工程应该是UNICODE的, 但是你输出的时候使用的是%s输出, 即按char字符串输出, 因为UNICODE中 一个字符使用两个字节表示, 并且对于字母, 是使用低字节表示, 高字节为0, 所以你以char字符串输出时, 输出一个字母, 就遇到0这个结束符了, 它就认为这个串结束了. 解决办法8楼已经给出.
tsakang 2013-08-26
  • 打赏
  • 举报
回复
vs2010新建的工程默认是UNICODE格式的;
你写代码的时候按照UNICODE的格式编码应该就不会出现上面的问题的。

或者你把工程设置成Use Multi-Byte Character Set,方法如下:
Project/工程 -> Properties在弹出对话框中选择Configuration Properties,
在右边的Project Defaults下有个Character Set:
你选择使用Use Multi-Byte Character Set即可
赵4老师 2013-08-26
  • 打赏
  • 举报
回复 1
if (argc>1) {
 for (int i=0; i < argc; i++)
 _tprintf(_T("argv[%d]==[%s]\n",i,argv[i]);
}
shaode01 2013-08-26
  • 打赏
  • 举报
回复
引用 4 楼 zhao4zhong1 的回复:
在每个最后不带\n的printf后面加fflush(stdout);
加了,没变化
shaode01 2013-08-26
  • 打赏
  • 举报
回复
// testprint.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int _tmain(int argc, _TCHAR* argv[])
{
	char a[]="20120908";
	FILE *fpin=fopen("in.txt","r");
	FILE *fp1=fopen("hhhhh.txt", "w");
	if(fp1==NULL)
	{
		printf("error1");
		exit(1);
	}
	char bank_accno[]="518718******4151";
	char mermststu[]="经营部";
	char fis_process_date[]="20180204";
	char dmt_trxn_date[]="20180204";
	double str_amt_sum=34.345,str_pay_sum=945.56;
	char dmt_trxn_time_hhmmss[]="143433";
	char dmt_trxn_terminal_id[]="12324324";
	char dmt_trxn_code[]="hello";
	char tmp[20];
	char card_no[]="518718******4151";
	char str_amt[]="22342";
	char str_pay[]="34323";
	int i;
if (argc>1) {
for (i=0; i < argc; i++)
printf("%10.10s ",argv[i]);
fflush(stdout);

}
getchar();
char in[30];


		fprintf(fp1,"%s\n\n","交易明细清单");
			fprintf(fp1,"入账账号:%s\t\t账户名称:%8.8s\n",bank_accno,mermststu);
			fprintf(fp1,"%s %.4s年%.2s月%.2s日\t\t","清算日期:",fis_process_date,fis_process_date+4,fis_process_date+6);
			fprintf(fp1,"%s %.4s年%.2s月%.2s日\n","实际交易日期:",dmt_trxn_date,dmt_trxn_date+4,dmt_trxn_date+6);
			fprintf(fp1,"-------------------------------------------------------------------------------------------------------------------\n");
			fprintf(fp1,"实际交易时间\tPOS号\t\t摘要\t\t卡号\t\t交易金额\t   手续费金额\t应入账金额\t备注\n");
			fprintf(fp1,"-------------------------------------------------------------------------------------------------------------------\n");
			if(strcmp(dmt_trxn_code,"hello")==0)
				strcpy(tmp,"你好");
				
				fprintf(fp1,"%.2s:%.2s:%.2s\t%8.8s\t%16.16s\t%19.19s\t%s\t%9.2f\t%s\n",dmt_trxn_time_hhmmss,dmt_trxn_time_hhmmss+2,dmt_trxn_time_hhmmss+4,dmt_trxn_terminal_id,tmp,card_no,str_amt,str_amt-str_pay,str_pay);
			
			fprintf(fp1,"----------------------------------------------------------------------------------------\n");
				fprintf(fp1,"%4.4s %.2s %4.4s\t%8.8s\t%16.16s\t%19.19s\t%.2f\t%9.2f\t%.2f\n","","","汇总","-----","-----","-----",str_amt_sum,str_amt_sum-str_pay_sum,str_pay_sum);
				fprintf(fp1,"----------------------------------------------------------------------------------------\n");
				
			fclose(fp1);
	return 0;
}

我觉得跟代码没关系
shaode01 2013-08-26
  • 打赏
  • 举报
回复
引用 3 楼 max_min_ 的回复:
[quote=引用 2 楼 shaode01 的回复:] [quote=引用 1 楼 max_min_ 的回复:]

// i 从 0 开始
if (argc>1) 
{
for (i= 0; i < argc; i++)
printf("%s ",argv[i]);
 
}
getchar();
跟这个没关系吧?! [/quote] sorry ,刚才看错了,把你代码贴出来看, 我测试没有问题,都能正常输出了[/quote] 这就是代码,我就是想问可能是什么设置上的问题
赵4老师 2013-08-26
  • 打赏
  • 举报
回复
在每个最后不带\n的printf后面加fflush(stdout);
max_min_ 2013-08-26
  • 打赏
  • 举报
回复
引用 2 楼 shaode01 的回复:
[quote=引用 1 楼 max_min_ 的回复:]

// i 从 0 开始
if (argc>1) 
{
for (i= 0; i < argc; i++)
printf("%s ",argv[i]);
 
}
getchar();
跟这个没关系吧?! [/quote] sorry ,刚才看错了,把你代码贴出来看, 我测试没有问题,都能正常输出了
shaode01 2013-08-26
  • 打赏
  • 举报
回复
引用 1 楼 max_min_ 的回复:

// i 从 0 开始
if (argc>1)
{
for (i= 0; i < argc; i++)
printf("%s ",argv[i]);

}
getchar();

跟这个没关系吧?!
max_min_ 2013-08-26
  • 打赏
  • 举报
回复

// i 从 0 开始
if (argc>1) 
{
for (i= 0; i < argc; i++)
printf("%s ",argv[i]);
 
}
getchar();

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧