① c代码 报错“段错误”
程序没有错误。这是编译器的预设错误,我忘记那里了,
for(int
id;
)
//一些编译器把他当作全局变量
,一些当作for循环的变量,这个你可以更改编译设置,就好了。我以前在vs2003遇到过,不过你还是定义全局变量,不要在for循环定义变量,这样不管编译器怎么预设,自己都不会错
② C语言中的NULL
在头文件 中 定义的一个常量 NULL=0;
用于指将指针 悬空(不指向任何位置)楼上的指向0内存不对的.
int *p=NULL;
NULL是个好东西,给一出生的指针一个安分的家
NULL不是被定义为0,就是被定义为(void *)0,这两种值几乎是相同的。当程序中需要一个指针时(尽管编译程序并不是总能指示什么时候需要一个指针),一个纯粹的零或者一个void指针都能自动被转换成所需的任何类型的指针。
NULL总是等于0吗?
对这个问题的回答与“等于”所指的意思有关。如果是指“与。比较的结果为相等”,例如:
if(/* ... */)
{
p=NULL;
}
else
{
p=/* something else */;
}
/* ... */
if(p==0)
那么NULL确实总是等于0,这也就是空指针定义的本质所在。
如果是指“其存储方式和整型值。相同”,那么答案是“不”。NULL并不必须被存为一个整型值0,尽管这是NULL最常见的存储方式。在有些计算机中,NULL会被存成另外一些形式。
如果想知道NULL是否被存为一个整型值0,可以(并且只能)通过调试程序来查看空指针的值,或者通过程序直接将空指针的值打印出来(如果将一个空指针强制转换成整类型,那么=所看到的很可能就是一个非零值)。
简单看了一下你的程序
首先,你没有给出完整的程序,这个让大伙看起来确实不方便,因为没有main函数,可能踩内存的地方并不是这个函数本身,是main函数
其次说你的这个函数,貌似确实有点问题,但是由于没有完整的程序,我只说出我的理解,如果有错,直接忽视就好
sprintf(flag_height,"%03d",i+1);
sprintf(flag_width,"%03d",j+1);
我觉得问题出在这里,你查下
sprintf
的用法,第一个参数应该是一个字符串的首地址,你写的确实没有错,参数给入的是一个地址flag_height,但是纵观你的程序,你并没有给这个指针赋值,程序运行到这里,估计在默认创建指针的时候应该赋值为NULL(貌似根据编译器不同而有不同),那个寻址后报出段错误,也是意料之中了
由于没有你完整的代码,不知道你要做什么,修改意见不好提
给出个人意见,仅供参考
如果要打印flag_height中的值,首先应该给flag_height指针分配一片内存,使用malloc函数,其次在向内从中写入值,然后调用sprintf,就应该没有问题了
④ C语言编译后无结果输出
楼主。 达到效果了啊。。
完全达到了 啊。。
楼主你题目里面字母和数字之间是两个空格!!!!!!!!!
要不,你自己算,如论如何数字的道理跟字母一样!!!
奇数在偶数位置上!!!
#include <stdio.h>
#include <string.h>
void fun(char *s,char t[])
{
int k,n=0;
for(k=0; k<(int )strlen(s); k++) //这里建议强制转换,就没有警告了。
if(k%2==1 && s[k]%2==1)
t[n++]=s[k];
t[n]='\0';
}
void main()
{
char s[100],t[100];
printf("Please enter string S:");
gets(s);//这里函数不能是scanf
/*因为scanf一旦遇到空格就不会继续读字符。也就是说你的S里面其实只放了
ABCDEGFG 巧合的是,你发现没有偶数位上的都是奇数,也就是什么也不输出了
后面又不在S里面。不信你该全部是AAAAAAAAAAAAAAAAAAAAAAAAAA 123456试试*/
fun(s,t);
printf(" The result is: %s\n",t);
}
⑤ C语言的字符串中如果有空格,在输出时编译器是怎么判断这个空格不是字符串结尾的'\0'
字符串里的空格是 ' '
而不是'\0',
'\0'是字符串结束标识符,代表整个字符串的结束
而空格是属于字符串里的一部分
⑥ c 语言 :段错误
p没有指向任何地方,默认的指针都是NULL
然后你就直接*p,这个时候不知道该引用哪块内存了,因为p是null
只能 int* p =(int*) malloc(sizeof(int));
这样把一块内存的地址给p,*p的时候就引用那块内存了
⑦ linux 下运行c出现段错误!!
我猜想错误的原因是:
char * c = "hello";//该c是一个指针,指向“hello”
reverse(c);
函数
void reverse(char * a)
{
int len = strlen(a);//该strlen函数是计算a的长度,以'\n'为结束,所以len可能不是5;
⑧ C语言大神帮看,为什么输入1之后输出为空白
程序有一点小BUG,第五行单引号应该变成双引号。
除此之外是没问题的,输入1后会输出数字1,然后不换行,之后输出sum的值0,所以你看到的输出应该是10。
但我猜测,你想要的效果可能不是这样,或许你可以在第五行输出中加上\n,在第六行else后和倒数第二行末尾分别添上左右大括号,看看这是不是你想要的。
另外,之前那个回答不用太在意,他没看题目,批量复制骗采纳的。
⑨ C语言中怎样输出空格 用printf("\ ")行不行
直接输入空格就可以了,或者输入“\t”相当于输入一个“Tab"
⑩ c语言 输出段错误 为甚嘛呢
strcat()函数是从数组source[]数组的第一个‘\0’开始将后一个参数中的字符复制上去的,你定义时造成source[]数组只能容纳三个字符,再将其它字符串复制时,空间不够用,就造成了段错误,段错误是对非法地址的操作造成的
#include <string.h>
#include <stdio.h>
int main(int argc,char **argv)
{
char *from_web_url="henhao";
char *p="good";
char source[100]="{{";
strcat(source,from_web_url);
strcat(source,"}}");
strcat(source,p);
printf("%s\n", source);
return 0;
}