小编Mih*_*eac的帖子

C文件处理中的相对路径

我需要在我的程序中读取文件,所以在提供路径时我想提供相对路径,因为要打开的所有文件都将位于当前文件夹中的某个文件夹中.我试过这个:

FILE *f=fopen("./abc/p.txt","r")
Run Code Online (Sandbox Code Playgroud)

abc是包含当前文件夹的文件夹,但fopen返回NULL.怎么做这件事?

c

1
推荐指数
1
解决办法
2919
查看次数

在Haskell中继承数据类型?

是否可以继承haskell中的数据类型?让我们假设:

data Data1 = Data1
    { name :: String
    } deriving (Show)
Run Code Online (Sandbox Code Playgroud)

在同一个模块上,我想做类似的事情:

data Data2 = Data1 
let x = Data2 "Something"
Run Code Online (Sandbox Code Playgroud)

我希望Data2有这个领域name,'继承' Data1.

我知道那data Data2 = Data1不是那样做的.所以,我想知道是否有办法做到这一点.

谢谢

安德烈

haskell

1
推荐指数
1
解决办法
399
查看次数

Haskell非穷举模式与`否则'一起使用

我使用以下功能:

combinations :: Int -> [a] -> [[a]]
combinations k xs = combinations' (length xs) k xs
  where combinations' n k' l@(y:ys)
          | k' == 0   = [[]]
          | k' >= n   = [l]
          | null l    = []
          | otherwise = Prelude.map (y :) (combinations' (n - 1) (k' - 1) ys) ++ combinations' (n - 1) k' ys 
Run Code Online (Sandbox Code Playgroud)

它适用于我可以提出的任何示例,但是当我从我的大项目中的其他函数调用它时,在某些情况下我得到一个例外:

Exception: projekt.hs:(34,9)-(38,108): Non-exhaustive patterns in function combinations'
Run Code Online (Sandbox Code Playgroud)

上面的定义有问题吗?是否遗漏了一些案例?我认为otherwise处理任何不属于以前情况的东西.

combinations haskell non-exhaustive-patterns

1
推荐指数
1
解决办法
843
查看次数

为什么字符串在新编译器中不可修改

在Turbo C/C++的日子里,您可以轻松修改字符串

char * str = "Hello";
str[1] = '1'; //it will make it H1llo;
Run Code Online (Sandbox Code Playgroud)

现在存储它们.bss,您不能直接修改它们.为什么?这不会使修改字符串变得困难吗?

对它有任何快速解决方法(但没有副作用)吗?我strdup()喜欢功能,但直接修改字符串真的很有趣.

c c++ compiler-construction string

0
推荐指数
1
解决办法
442
查看次数

`strcpy`超出了C中字符串数组的范围

我不明白为什么我能这样做:

#include "stdio.h"
#include "string.h"

char a[1][100];

void main(void) {
    strcpy(a[0], "test1");
    strcpy(a[1], "test2");
    strcpy(a[6], "test3");

    printf("%s", a[0]);
    printf("%s", a[1]);
    printf("%s", a[6]);

}
Run Code Online (Sandbox Code Playgroud)

将返回:

test1test2test3
Run Code Online (Sandbox Code Playgroud)

在我的理解中,当我这样做时,char a[1][100]我正在创建一个带有2个元素的二维数组,a[0]并且a[1]每个数组都指向一个包含100个字符的数组.为什么我可以分配任何东西a[6]?那不应该是出界的吗?记忆力在哪里?

谢谢你清理它.

c arrays string

0
推荐指数
1
解决办法
426
查看次数

尝试在if语句之后调用C中的变量

我正在制作一个计算器应用程序,我想看看我是否可以调用我在if语句中设置的变量; if语句结束后.我可以做吗?我尝试了几件事,但我无法让它发挥作用.

int main()
{
    // ...
    int finished;
    do{
        // ...           
        if(operator == 1){
            int finished = number[1] + number[2];
            printf("\n\n%d \+ %d is: %d", number[1], number[2], finished);

        }
        if(operator == 2){
            int finished = number[1] - number[2];
            printf("\n\n%d \- %d is: %d", number[1], number[2], finished);

        }
        // ...
        printf("\ndebug %d\n: ", finished);
        // ...
    } while (doAgain == 1);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c

-1
推荐指数
1
解决办法
113
查看次数

关于C:指针和二维数组

这是一个问题:该计划的输出是什么?

#include<stdio.h>
int main()
{
int  A[2][10]={{1,2,3,4,5,6,7,8,9,10},{11,12,13,14,15,16,17,18,19,20}   };
int (*v)[10]=A;

printf("**v=%d\n",**v);
printf("**(v+1)=%d\n",**(v+1));
printf("*(*v+1)=%d\n",*(*v+1));
printf("*(v[0]+1)=%d\n",*(v[0]+1));
printf("*(v[1])=%d\n",*(v[1]));
}
Run Code Online (Sandbox Code Playgroud)

输出:

**v=1
**(v+1)=11
*(*v+1)=2
*(v[0]+1)=2
*(v[1])=11
Run Code Online (Sandbox Code Playgroud)

特别是,我不太清楚*v如何将阵列A分成10个部分,请告诉我每个输出的原因.谢谢!

c arrays pointers

-5
推荐指数
1
解决办法
273
查看次数