10 2011 档案
摘要:【问题】用双链表实现贪吃蛇时,用gcc编译后,执行发生段错误。用gdb调试发现错误位于删除操作,后检查发现真正的原因出在插入操作。如题所示,双链表掉链子了,没接上。【分析】如图1所示,在插入C之前,A和B节点是链接的,现在要在节点A和B节点之间插入一节点C,参照教科书的算法如下:(1) C->prev=A(2) C->next=B(3) A->next=C(4) B->prev=C错误代码实现如下:node *C = (node *)malloc(sizeof(node));C->prev = A;//step 1C->next = A->next;/
阅读全文
摘要:一 原理由于存储变量时地址对齐的要求,编译器在编译程序时会遵循两条原则:【原则1】结构体变量中成员的偏移量必须是成员大小的整数倍(0被认为是任何数的整数倍)【原则2】结构体大小必须是所有成员大小的整数倍。结构体总大小等于最后一个成员的偏移量加上其大小二 实例例1 计算结构体的大小struct A{int a;char b;char c;};【解析】利用sizeof 计算,结果为8。记偏移量为ref,大小为size:struct A{int a;//ref_a=0,size_a=4char b;//ref_b=ref_a+size_a=4,size_b=1char c;//ref_c=ref_b
阅读全文
摘要:1 函数原型及用法(1) memcpy【函数原型】void *memcpy(void * dst, const void *src, size_t count);C99原型:void *memcpy(void * restrict dst, const void *restrict src, size_t count);【解析】memcpy用于内存拷贝,在执行操作时,如果src和dst的地址重叠,拷贝会发生错误。C99中引入关键字restrict进行了内存访问限制。(2) memmove【函数原型】void *memmove(void *dst, const void *src, size_t
阅读全文
摘要:#! /usr/bin/perl$ans=max(2,18,3,5);print "Maximum value is $ans\n";sub max{ my $biggest=shift; foreach(@_){ $biggest=$_ if $_>$biggest; }return $biggest;}【说明】$_:当前参数@_:在子程序的调用过程中传值,perl使这些值可以在子程序中可用。
阅读全文
摘要:【问题】用c编写cgi程序如何取出html表单post来的数据?【分析】html表单post来的数据形如username="zhang"&&password="123456"&&useid="012"【方法1】#include <stdio.h>#include <stdlib.h>#include <string.h> char* getcgidata(FILE* fp, char* requestmethod);int main(){char *input;cha
阅读全文
摘要:1 $$:显示PID编号[tandesir@localhost shell]$ echo $80682 $?:退出状态[tandesir@localhost shell]$ echo $?0[tandesir@localhost shell]$ ls test.txtls: 无法访问 test.txt: 没有那个文件或目录[tandesir@localhost shell]$ echo $?2[tandesir@localhost ~]$ true[tandesir@localhost ~]$ echo $?0[tandesir@localhost ~]$ false[tandesir@loc
阅读全文
摘要:运用select和case可以制作简单的交互式菜单。#! /bin/bashselect CHIOCE in show help exitdo case "$CHIOCE" in show) ls ;; help) echo "Help : This is a joke for test!" ;; exit) exit 0 ;; esacdone
阅读全文
摘要:【方法1】运用for in语句(1) bash#! /bin/bash
sum=0;
for i in {1..100}
do ((sum = sum + i))
done echo $sum
(2) perl#! /usr/bin/perl
$sum=0;
for ($i = 0; $i <=100 ; $i+=1)
{ $sum +=$i;
}
print "$sum\n";
【方法2】运用while语句(1) bash#! /bin/bash
i=0;
sum=0;
while [ "$i" -lt 100 ]
do ((i = i + ..
阅读全文