C语言编程:sprintf(chr,"%s",a[1]);字符数组输出的问题

如:char* a[10];char chr[50];

a[0]="mscong(1)";
a[1]="abolg(2)";
sprintf(chr,"%s",a[1]); 这样输出是 abolg(2);
怎样才能只输出abolg呢?就是输出把“(2)”去掉。

1、字符数组输出的时候,应该传入字符组首地址。sprintf(chr,"%s",a);才正确。
2、sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致sprintf 比printf 有用得多。
sprintf 是个变参函数,定义如下:
int sprintf( char *buffer, const char *format [, argument] ... );
除了前两个参数类型固定外,后面可以接任意多个参数。而它的精华,显然就在第二个参数:
格式化字符串上。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-05-10
如果你知道位置:
sprintf(chr,"%s",a[1]); chr[5]=0; printf("%s\n",chr); 只输出abolg

如果你寻找小括号位置abcdolg(2):
int i;
for (i=0;i<strlen(chr);i++) if (chr[i] =='(' ) {chr[i]=0;break;};
printf("%s",chr); 只输出abcdolg本回答被提问者和网友采纳
第2个回答  2013-05-09
你的目的是把括号前的字符串保存到chr数组里,那用sprintf是达不到目的的。
你可以先把整个字符串复制到chr,然后找到‘(',把它替换成’\0'就可以了。
char *cp;
strcpy(chr, a[0]);
cp = strchr(chr, '(');
if(cp)
*cp='\0';
第3个回答  2013-05-09
#include<iostream>
#include <stdio.h>
using namespace std;

int main()
{
char* a[10];char chr[50];
memset(chr, 0, sizeof(chr));
a[0]="mscong(1)";
a[1]="abolg(2)";
_snprintf(chr,5,"%s",a[1]);
cout << chr;
return 0;
}追问

可是我本来不知道a[1]="abolg(2)";这值是提取出来的,提取出来的值不同,所以不确定其位数,这要怎么办呢?
谢谢了!

追答

#include
#include
#include

using namespace std;

int main()
{
char* a[10];char chr[50];
memset(chr, 0, sizeof(chr));
a[0]="mscong(1)";
a[1]="abolg(2)";
char * strFind = "(";
char * pos= find_first_of(a[1], a[1] + strlen(a[1]), strFind, strFind + strlen(strFind));
_snprintf(chr,pos - a[1],"%s",a[1]);
cout << chr;
return 0;
}

第4个回答  2013-05-10
sprintf(chr,"%5s",a[1]);

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网