如何随心所欲给指针数组赋值字符串

纹枰老妖 2014-04-15 05:31:57
在c语言中,可以给一个数组直接赋值字符串,像下面的形式:char yijuhua[ ] = "必须是一串常量字符吗?" ,请看下面的代码——
[code=c][#include "stdio.h"
char *dapu[4];

void main()
{
int a=3,b=2;
dapu[0]="车3退2";
printf("%s",dapu[0]);
}/code]

在给dapu[0]赋值字符串时,双引号的内容必须都得是常量字符吗?有没有不确定的可选择余地【类似自动变量】呢?比如我瞎想的形式——【 dapu[0] = ("车%d退%d",a,b); 】,输出的同时也是“ 车3退2 ”呢??
...全文
391 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
MonkeyKingMKY 2014-04-16
  • 打赏
  • 举报
回复
楼主 似乎 想把 特定格式 的字符串 保存在 一个 变量里 像他所说的

#include "stdio.h"
char *dapu[4];

void main()
{
   int a=3,b=2;
   dapu[0]="车3退2";
   printf("%s",dapu[0]);  
}
的 dapu[0] 如果是 stirng 的话
string  dapu[4];
dapu[0] = "车3退2";
就可以了 但是 楼主用的 char 指针 实在是 没法 做到吧 除非 用 sprintf 格式化 输出到 某一 字符 数组中,等
1cctv 2014-04-16
  • 打赏
  • 举报
回复
或许仅仅是想这样? int outStr(char *formatStr,int x,int y) { return printf(formatStr,x,y); } outStr("车%d退%d",1,2);
MonkeyKingMKY 2014-04-16
  • 打赏
  • 举报
回复
不好猜啊~ 我已经 很努力了
1cctv 2014-04-16
  • 打赏
  • 举报
回复
楼主的心思不好猜,不好猜,不好猜呀. 或许你还不太会用sprintf.
MonkeyKingMKY 2014-04-16
  • 打赏
  • 举报
回复
老妖啊~ 不是 我想 把问题复杂化, 楼主 想要做的 操作 明显 是 想 做出 类似 string 类型的 操作, 但是 他使用的 是 类似 C 语言 的 风格, 当然 没有办法 直接 弄出来喽~~
1cctv 2014-04-16
  • 打赏
  • 举报
回复
估计楼主是想这么用? outStr(int name,int dir,int x,int y) { const char *nameStr[]={"车","马","炮"}; const char *formatStr[]={"%s%d进%d","%s%d退%d"}; printf(formatStr[dir],nameStr[name],x,y); } 更进一步的,可以递次的动态生成格式串,但为了在格式串中产生%,需要显示使用%%:
ccrun.com 2014-04-16
  • 打赏
  • 举报
回复
不要把简单的问题复杂化。 #include <stdio.h> void main() { int a = 3, b = 2; sprintf(dapu[0], "车%d退%d", a, b); printf("%s",dapu[0]); }/code]
MonkeyKingMKY 2014-04-15
  • 打赏
  • 举报
回复
唉~ 为什么 我这么 说了 还是 弄不明白呢? 无论 你想 弄 什么 字符串, 只要 你想让他变化, 那么 你就 不可能 使用 静态区的字符串。 那么 你该怎么办? 就像 我 第一个
char dapu[MAX_LEN];
这么写的 , 把你 想要 写的 字符串 放在里面 至于 你想 写 什么样子的 随便你, 我学你 一句话 这样说可能还是难以明白,这样吧,你可以 使用 sprintf 等 不列举了 ,格式化 输出到里面, 根据 你的 程序, 你或许想 弄一系列 字符串 怎么办? 你可以 malloc 一块儿 足够大的 内存, 组织好 你的 字符串 , 写到 里面 也可以。 或许 你很喜欢 复杂的 东西, 那么, 你可以 建立 链表, 把 你的 字符串 一个一个 的 串号。 这都是解决办法,
纹枰老妖 2014-04-15
  • 打赏
  • 举报
回复
引用 4 楼 MonkeyKingMKY 的回复:
谁也没说 你的不能执行~
是这样的朋友,我想写一个打印棋谱的程序,既然是棋谱,里面的变化组合肯定是随棋子来的,我不可能把每种变化都写进去。比如车二进四,其中的“二”和“四”是随棋子走动决定的,这样说可能还是难以明白,这样吧,看下面的一段代码相信您就懂了:
for(che = 0; che < 10; che++)
{
  qibu[0] = .../* 这里的车进几个格完全由车已经自增了几次决定 */
}
由于每次读入的字符串里面都是字符串常量【不管循环体执行几次里面都是固定的东西】,那可不可以在里面掺杂一些不是固定常量的东西呢【像随循环体变化而变化的】?
MonkeyKingMKY 2014-04-15
  • 打赏
  • 举报
回复
但是 根据 你写的东西,说明 你没有 理解 C 形式 的字符串 操作的方法,和结构。
char *dapu[4];
你既然 写出 这种东西 那你 为什么不写 const char * dapu; dapu = "车3退2"; 再说了 dapu[0] 只是 一个 指针 而已, 指向的是 一个 固定区域的 字符串。那 你预留的 后面 三个空间 是干什么的呢?
MonkeyKingMKY 2014-04-15
  • 打赏
  • 举报
回复
谁也没说 你的不能执行~
纹枰老妖 2014-04-15
  • 打赏
  • 举报
回复
引用 2 楼 MonkeyKingMKY 的回复:
如果 想方便 就是用 C++ 中的东西 如 string , AnsiString CString 。。。。
我想您没弄懂我的意思,这种效果不我想要的,因为我的源代码也可以执行

[#include "stdio.h"
char *dapu[4];

void main()
{
   int a=3,b=2;
   dapu[0]="车3退2";
   printf("%s",dapu[0]);  
}
MonkeyKingMKY 2014-04-15
  • 打赏
  • 举报
回复
如果 想方便 就是用 C++ 中的东西 如 string , AnsiString CString 。。。。
MonkeyKingMKY 2014-04-15
  • 打赏
  • 举报
回复

#include "stdio.h"
#include "string.h"
char dapu[MAX_LEN];  // 足够大的空间

void main()
{
	int a=3,b=2;
	strcpy( dapu, "车3退2" );
	printf("%s",&dapu[0]);  
}

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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